Language Intermedio

Aggiungi implementazioni di metodi direttamente nelle interfacce, abilitando l'ereditarietà multipla del comportamento.

✕ Java 7
// Need abstract class to share behavior
public abstract class AbstractLogger {
    public void log(String msg) {
        System.out.println(
            timestamp() + ": " + msg);
    }
    abstract String timestamp();
}

// Single inheritance only
public class FileLogger
    extends AbstractLogger { ... }
✓ Java 8+
public interface Logger {
    default void log(String msg) {
        IO.println(
            timestamp() + ": " + msg);
    }
    String timestamp();
}

// Multiple interfaces allowed
public class FileLogger
    implements Logger, Closeable { ... }
Vedi un problema con questo codice? Faccelo sapere.
🔀

Ereditarietà multipla

Le classi possono implementare molte interfacce con metodi default, a differenza dell'ereditarietà da una singola classe astratta.

📦

Evoluzione dell'API

Aggiungi nuovi metodi alle interfacce senza rompere le implementazioni esistenti.

🧩

Comportamento componibile

Mescola e abbina le capacità di più interfacce liberamente.

Approccio Vecchio
Classi astratte per comportamento condiviso
Approccio Moderno
Metodi default nelle interfacce
Dal JDK
8
Difficoltà
Intermedio
Metodi default nelle interfacce
Disponibile

Disponibile dal JDK 8 (marzo 2014).

Prima di Java 8, condividere il comportamento tra classi non correlate richiedeva classi astratte, che limitavano all'ereditarietà singola. I metodi default permettono alle interfacce di fornire implementazioni di metodi, così le classi possono ereditare comportamento da più interfacce. Questo è stato essenziale per evolvere le API Collections (es. List.forEach, Map.getOrDefault) senza rompere le implementazioni esistenti.

Condividi 𝕏 🦋 in