Anonymous Class - Lớp không tên trong Java

Tạo ra lớp không tên là cách tạo ra đối tượng lớp có sự mở rộng từ một lớp được kế thừa khi đang chạy code:

Xem ví dụ sau, trước tiên có một lớp thông thường tên Machine

class Machine {
  public void start() {
    System.out.println("Starting...");
  }
}

Giờ tạo một đối tượng lớp Machine, nhưng lớp có mở rộng thêm khi chạy:

public static void main(String[ ] args) {

  Machine m = new Machine() {
    @Override
    public void start() {
      System.out.println("Wooooo");
    }
  };

  m.start();
  //Outputs "Wooooo";

  Machine m2 = new Machine()
  m2.start();
 //Outputs "Starting...";
}


Ví dụ trên sau khởi tạo bạn sẽ mở cặp ngoặc nhọn { ... } rồi viết code mở rộng trong đó. Code trên đã quá tải phương thức start của lớp cha.

Chú thích @Override để giúp code dễ hiểu, cho biết đây là một nạp chồng

Việc mở rộng chỉ có hiệu lực cho đối tượng hiện tại tạo ra, chứ không làm thay đổi lớp. Ví dụ trên m2 vẫn là lớp Machine gốc.

Ví dụ thêm

class Machine {
    public void start() {
        System.out.println("Starting...");
    }
}

class Program {
    public static void main(String[ ] args) {
        Machine m1 = new Machine() {
            @Override public void start() {
                System.out.println("Wooooo");
            }
        };
        m1.start();
        Machine m2 = new Machine();
        m2.start();

        Machine m3 = new Machine() {
            @Override public void start() {
                System.out.println("vroomvrom");
            }
        };

        m3.start();
    }
}
//Woooo
//Starting
//vroomvrom