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.