根据JLS:
15.9.5 匿名类声明:匿名类声明是由编译器根据类实例创建表达式自动推导出的。
匿名类从不是抽象类(§8.1.1.1)。匿名类始终是内部类(§8.1.3); 它永远不会是静态的(§8.1.1,§8.5.2)。匿名类始终是隐含 final 的(§8.1.1.2)。
这似乎是一项具体的设计决策,因此很可能有一些历史背景。
如果我选择像这样的类:
15.9.5 匿名类声明:匿名类声明是由编译器根据类实例创建表达式自动推导出的。
匿名类从不是抽象类(§8.1.1.1)。匿名类始终是内部类(§8.1.3); 它永远不会是静态的(§8.1.1,§8.5.2)。匿名类始终是隐含 final 的(§8.1.1.2)。
这似乎是一项具体的设计决策,因此很可能有一些历史背景。
如果我选择像这样的类:
SomeType foo = new SomeType() {
@Override
void foo() {
super.foo();
System.out.println("Hello, world!");
}
};
如果我选择这样做,为什么我不能再次子类化它?
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!");
}
};
我不是说我一定想要这么做,甚至也想不出为什么我会这样做。但我很好奇为什么会这样。