Согласно JLS:
15.9.5 Объявления анонимных классов Объявление анонимного класса автоматически выводится компилятором из выражения создания экземпляра класса.
Анонимный класс никогда не бывает абстрактным (§8.1.1.1). Анонимный класс всегда является внутренним классом (§8.1.3); он никогда не бывает статичным (§8.1.1, §8.5.2). Анонимный класс всегда неявно окончательный (§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!");
}
};
Я не говорю, что я обязательно этого хочу или даже могу придумать причину, по которой я бы этого хотел. Но мне интересно, почему это так.
static Foo $accessFieldFoo(OutrerType o)
. Также внешние классы должны знать свои внутренние классы (метаданные), поэтому, если они расширены, это невозможно. - person bestsss   schedule 21.12.2011