Una anonymous inner class può essere usata dovunque si possa assegnare un reference. Quindi: assegnamenti a variabili (locali, di istanza, di classe), argomenti di costruttori/metodi.
L'uso principale è per l'override "al volo" di uno o pochi metodi quando non c'è bisogno di particolare riutilizzo di quella implementazione.
E si parla solo di override, perché siccome la classe è "anonima", il nome non lo sai e se mettessi dei metodi "nuovi", in più rispetto al super-tipo che estendi/implementi, non sapendo il nome classe, non potresti usarli! (a parte istanziare e invocare subito al volo 1 metodo).
Ai fini del override, non c'è differenza tra l'usare una classe anonima e una classe "regolare" (top-level o inner). Conta più che altro la brevità o meno e il (più o meno) interesse per il riutilizzo.
Le differenze tecniche ovviamente ci sono: in una classe anonima non puoi definire tu un costruttore. In una classe regolare, sì ovviamente. Poi ad esempio in una classe anonima non puoi definire membri static (al massimo li puoi ereditare) per lo stesso motivo detto sopra: non sapendo il nome della classe, non potresti usarli. In una classe regolare puoi definire membri static.


Rispondi quotando