Language Intermédiaire

Ajoutez des implémentations de méthodes directement dans les interfaces, permettant l'héritage multiple de comportement.

✕ 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 { ... }
Un problème avec ce code ? Dites-le nous.
🔀

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.

Ancienne Approche
Classes abstraites pour le comportement partagé
Approche Moderne
Méthodes default dans les interfaces
Depuis JDK
8
Difficulté
Intermédiaire
Méthodes default dans les interfaces
Disponible

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.

Partager 𝕏 🦋 in