Language 中級

インターフェースのデフォルトメソッド

インターフェースにメソッド実装を直接追加し、多重継承を可能にする。

✕ 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 { ... }
このコードに問題がありますか? お知らせください。
🔗

多重継承

クラスは複数のインターフェースのデフォルトメソッドを実装できます(単一継承のクラスとは異なります)。

🔄

APIの進化

既存の実装を壊さずにインターフェースに新しいメソッドを追加できます。

🧩

組み合わせ可能な動作

複数のインターフェースから機能を自由に組み合わせられます。

旧来のアプローチ
共有動作のための抽象クラス
モダンなアプローチ
インターフェースのデフォルトメソッド
JDKバージョン
8
難易度
中級
インターフェースのデフォルトメソッド
利用可能

JDK 8(2014年3月)以降、利用可能

Java 8以前、無関係なクラス間で動作を共有するには抽象クラスが必要で、単一継承に制限されていました。デフォルトメソッドにより、インターフェースにメソッド実装を提供できるようになり、クラスは複数のインターフェースから動作を継承できます。これはCollections API(List.forEach、Map.getOrDefaultなど)を既存の実装を壊さずに進化させるために不可欠でした。

共有 𝕏 🦋 in