Language Fortgeschritten

Methodenimplementierungen direkt in Interfaces einfügen und so Mehrfachvererbung von Verhalten ermöglichen.

✕ 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 { ... }
Problem mit diesem Code entdeckt? Sag uns Bescheid.
🔀

Mehrfachvererbung

Klassen können viele Interfaces mit Default-Methoden implementieren – anders als bei einfacher abstrakter Klassenvererbung.

📦

API-Evolution

Neue Methoden zu Interfaces hinzufügen, ohne bestehende Implementierungen zu brechen.

🧩

Kombinierbares Verhalten

Fähigkeiten aus mehreren Interfaces frei kombinieren.

Alter Ansatz
Abstrakte Klassen für gemeinsames Verhalten
Moderner Ansatz
Default-Methoden in Interfaces
Seit JDK
8
Schwierigkeitsgrad
Fortgeschritten
Default-Methoden in Interfaces
Verfügbar

Verfügbar seit JDK 8 (März 2014).

Vor Java 8 erforderte das Teilen von Verhalten zwischen unverwandten Klassen abstrakte Klassen, was auf Einfachvererbung beschränkte. Default-Methoden erlauben Interfaces, Methodenimplementierungen bereitzustellen, sodass Klassen Verhalten von mehreren Interfaces erben können. Dies war entscheidend für die Weiterentwicklung der Collections-API (z. B. List.forEach, Map.getOrDefault) ohne bestehende Implementierungen zu brechen.

Teilen 𝕏 🦋 in