Secondo il JLS:Perché tutte le classi anonime sono implicitamente definitive?
15.9.5 Anonymous Classe Dichiarazioni Una dichiarazione della classe anonima è derivato automaticamente da un'espressione di creazione istanza di classe dal compilatore.
Una classe anonima non è mai astratta (§8.1.1.1). Una classe anonima è sempre una classe interna (§8.1.3); non è mai statico (§8.1.1, §8.5.2). Una classe anonima è sempre implicitamente definitiva (§8.1.1.2).
Questa sembra una decisione di progettazione specifica, quindi è probabile che abbia qualche storia.
Se ho scelto di avere una classe come questa:
SomeType foo = new SomeType() {
@Override
void foo() {
super.foo();
System.out.println("Hello, world!");
}
};
Perché non mi è concesso di sottoclasse di nuovo se lo desiderano?
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!");
}
};
Non sto dicendo che necessariamente voglio, o posso anche pensare a un motivo per cui lo farei. Ma sono curioso perché questo è il caso.
Prenderesti "la sintassi non lo consente"? ;-) Questo potrebbe essere il motivo per cui hanno detto "_intlicitly_ final" ... solo a indovinare. –
quando compilati non sono anonimi e non privati. Tuttavia contengono ancora i metadati e il loro completamento non garantisce casi super-strani (estendendoli) – bestsss
@David, c'è anche un motivo tecnico – bestsss