È possibile definire classi anonime che implementano un’interfaccia o estendono una classe. Sono utilizzate esclusivamente per creare un’unica istanza.
Ad esempio sono utili per creare iteratori al volo.
TipoDaEstendereNonAnonimo unicoRiferimentoAOggetto = new TipoDaEstendereNonAnonimo()
{
// codice della classe anonima
}
Esempio:
public interface Formula
{
double calculate(int a);
default double sqrt(int a) { return Math.sqrt(a); }
}
Da Java 8 è disponibile l’annotazione @FunctionalInterface
, che garantisce che l’interfaccia sia dotata esattamente di un solo metodo astratto.
@FunctionalInterface
public interface Runnable
{
void run();
}
Sono necessarie per definire espressione lambda.