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.