Méthodes default dans les interfaces
Ajoutez des implémentations de méthodes directement dans les interfaces, permettant l'héritage multiple de comportement.
// 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 { ... }
Héritage multiple
Les classes peuvent implémenter plusieurs interfaces avec des méthodes default, contrairement à l'héritage simple avec les classes abstraites.
Évolution d'APIs
Ajoutez de nouvelles méthodes aux interfaces sans casser les implémentations existantes.
Comportement composable
Combinez librement des capacités de plusieurs interfaces.
Disponible depuis JDK 8 (mars 2014).
Avant Java 8, partager du comportement entre des classes non liées nécessitait des classes abstraites, ce qui limitait à l'héritage simple. Les méthodes default permettent aux interfaces de fournir des implémentations, de sorte que les classes peuvent hériter de comportement de plusieurs interfaces. Cela était essentiel pour faire évoluer l'API Collections (ex. List.forEach, Map.getOrDefault) sans casser les implémentations existantes.