Theo JLS:Tại sao tất cả các lớp ẩn danh ngầm hoàn toàn?
15.9.5 Anonymous Lớp khai báo Tờ khai lớp nặc danh được tự động lấy từ một biểu thức tạo lớp dụ bởi trình biên dịch .
Lớp ẩn danh không bao giờ trừu tượng (§8.1.1.1). Một lớp vô danh là luôn là một lớp bên trong (§8.1.3); nó không bao giờ tĩnh (§8.1.1, §8.5.2). Một lớp ẩn danh luôn luôn là hoàn toàn cuối cùng (§8.1.1.2).
Điều này có vẻ như đó là một quyết định thiết kế cụ thể, vì vậy rất có thể là nó có một số lịch sử.
Nếu tôi chọn để có một lớp học như thế này:
SomeType foo = new SomeType() {
@Override
void foo() {
super.foo();
System.out.println("Hello, world!");
}
};
Tại sao tôi không được phép phân lớp nó một lần nữa nếu tôi nên chọn cái nào?
SomeType foo = new SomeType() {
@Override
void foo() {
super.foo();
System.out.println("Hello, world!");
}
} {
@Override
void foo() {
System.out.println("Hahaha, no super foo for you!");
}
};
Tôi không nói rằng tôi nhất thiết muốn, hoặc thậm chí có thể nghĩ ra lý do tại sao tôi lại làm như vậy. Nhưng tôi tò mò tại sao đây là trường hợp.
Bạn có nhận "cú pháp không cho phép" không? ;-) Đó có thể là lý do tại sao họ nói "_implicitly_ final" ... chỉ đoán thôi. –
khi được biên dịch, chúng không ẩn danh và không riêng tư. Tuy nhiên, chúng vẫn chứa siêu dữ liệu và đảm bảo chúng không có trường hợp siêu kỳ lạ (bằng cách mở rộng) – bestsss
@David, có lý do kỹ thuật quá – bestsss