Le classi anonime in Java sono classi che non hanno un nome esplicito. Sono utilizzate per creare oggetti che implementano un’interfaccia o estendono una classe, senza dover definire una classe separata.

Vengono associate direttamente al riferimento ad oggetto.

Utili quando si deve fornire un implementazione personalizzata di una classe o di un interfaccia e tale implementazione deve essere utilizzata una singola volta nel codice.

interface Formula {
	double calcola(int a);
	default double sqrt(int a) {return Math.sqrt(a); }
}
public class Esempio {
	public static void main(String[] args) {
    // Creazione di una classe anonima che implementa l'interfaccia Formula
 
    Formula formula = new Formula() {
		public double calcola(int a) {
			return sqrt(a * 100);
		}
	};
  }
}

Memoria

Sono compilate come le classi interne, quindi vanno nella heap ma non hanno un tipo definito e il this si riferisce all’oggetto anonimo della classe estesa.

Differenza con Java - Lambda Expressions