Default-Methoden in Interfaces
Methodenimplementierungen direkt in Interfaces einfügen und so Mehrfachvererbung von Verhalten ermöglichen.
// 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 { ... }
public interface Logger {
default void log(String msg) {
IO.println(
timestamp() + ": " + msg);
}
String timestamp();
}
// Multiple interfaces allowed
public class FileLogger
implements Logger, Closeable { ... }
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.
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.