Il concetto mi è chiaro, volevo però fare una considerazione.
Da quello che ho capito le classi anonime vanno dichiarate all'interno del corpo di un metodo o passate come parametro ad un metodo e trovano l'utilizzo migliore quando vogliamo fare in una classe override di un metodo di un'altra classe/interfaccia/classe astratta.
Per semplicità vi posto nuovamente i 2 esempi più concreti dove si notano i due utilizzi:
ESEMPIO 1
codice:public class Outer4 { private String messaggio = "Nella classe "; public void metodoConClasse(final int a) { ClasseEsistente ce = new ClasseEsistente() { @Override public void metodo() { System.out.println(messaggio+"anonima numero "+ a); } }; ce.metodo(); } } public class ClasseEsistente { public void metodo() { System.out.println("Nella classe esistente"); } }
ESEMPIO 2
codice:public class TestPersona { public static void main(String args[]) { System.out.println(new Persona("Arjen","Lucassen","03/04/1960","Compositore","Olanda") { @Override public String toString() { ... } } ); } } public class Persona { ... @Override public String toString() { return "Persona{" + "nome=" + nome + ", cognome=" + cognome + '}'; } }
In entrambi i casi è come se andassimo ad istanziare un oggetto di una classe già esistente e lo facciamo per avere accesso ad un particolare metodo su cui vogliamo appunto fare l'override.
E' corretto? Se si, allora la mia domanda è: non avremmo ottenuto lo stesso risultato estendendo la classe già esistente piuttosto che utilizzando una classe anonima? Avremmo lo stesso avuto l'accesso al metodo su cui fare l'override.

Rispondi quotando