Một lớp bên trong ẩn danh là một lớp bên trong được khai báo không có bất kỳ tên lớp nào ở tất cả. Nói cách khác, lớp bên trong không tên được gọi là lớp bên trong ẩn danh . Vì nó không có tên nên nó không thể có hàm tạo bởi vì chúng tôi biết rằng tên phương thức khởi tạo giống với tên lớp.
Chúng tôi có thể xác định một lớp bên trong ẩn danh và tạo đối tượng của nó bằng cách sử dụng mới đồng thời trong một bước.
Cú pháp
new(argument-list){ // Anonymous class body }
Các loại lớp bên trong ẩn danh trong Java
- Lớp bên trong ẩn danh mở rộng một lớp
- Lớp bên trong ẩn danh triển khai giao diện
- Lớp bên trong ẩn danh làm đối số
Lớp bên trong ẩn danh mở rộng một lớp
Đây là một mới từ khóa được sử dụng để tạo một đối tượng của lớp bên trong ẩn danh có một tham chiếu của loại lớp cha.
Ví dụ
class Car { public void engineType() { System.out.println("Turbo Engine"); } } public class AnonymousClassDemo { public static void main(String args[]) { Car c1 = new Car(); c1.engineType(); Car c2 = new Car() { @Override public void engineType() { System.out.println("V2 Engine"); } }; c2.engineType(); } }
Đầu ra
Turbo Engine V2 Engine
Lớp bên trong ẩn danh triển khai giao diện
Đây là một mới từ khóa được sử dụng để tạo một đối tượng của lớp bên trong ẩn danh có tham chiếu về loại giao diện.
Ví dụ
interface Software { public void develop(); } public class AnonymousClassDemo1 { public static void main(String args[]) { Software s = new Software() { @Override public void develop() { System.out.println("Software Developed in Java"); } }; s.develop(); System.out.println(s.getClass().getName()); } }
Đầu ra
Software Developed in Java AnonymousClassDemo1$1
Lớp bên trong ẩn danh làm đối số
Chúng tôi có thể sử dụng lớp bên trong ẩn danh dưới dạng một đối số để nó có thể được chuyển cho các phương thức hoặc hàm tạo.
Ví dụ
abstract class Engine { public abstract void engineType(); } class Vehicle { public void transport(Engine e) { e.engineType(); } } public class AnonymousInnerClassDemo2 { public static void main(String args[]) { Vehicle v = new Vehicle(); v.transport(new Engine() { @Override public void engineType() { System.out.println("Turbo Engine"); } }); } }
Đầu ra
Turbo Engine