Согласно 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!");
}
};
Я не говорю, что обязательно хочу, или даже могу придумать причину почему бы мне. Но мне любопытно, почему это так.