Javaのdefaultキーワードの目的は何ですか?質問する

Javaのdefaultキーワードの目的は何ですか?質問する

Javaのインターフェースはクラスに似ていますが、インターフェースの本体には以下を含めることができます。抽象メソッドのみおよびfinalフィールド(定数)。

最近、こんな質問を見かけました

interface AnInterface {
    public default void myMethod() {
        System.out.println("D");
    }
}

インターフェース定義によれば、抽象メソッドのみ許可されています。なぜ上記のコードをコンパイルできるのでしょうか?defaultキーワードは何ですか?

一方、以下のコードを書こうとすると、modifier default not allowed here

default class MyClass{

}

の代わりに

class MyClass {

}

キーワードの目的を教えていただけますかdefault? インターフェース内でのみ許可されますか? default(アクセス修飾子なし) とどう違うのですか?

ベストアンサー1

これはJava 8の新機能で、interface実装を提供することができます。Java 8で説明されていますJLS-13.5.6. インターフェースメソッド宣言(一部抜粋)

メソッドを追加したりdefault、メソッドを から に変更したりしてもabstractdefault既存のバイナリとの互換性は損なわれませんが、IncompatibleClassChangeError既存のバイナリが メソッドを呼び出そうとすると が発生する可能性があります。このエラーは、修飾型 がT2 つのインターフェース および のサブタイプである場合に発生します。Iここで、 とはJ両方とも同じシグネチャと結果を持つメソッドを宣言しており、 も も他方のサブインターフェースではありません。IJdefaultIJ

JDK 8の新機能(一部)

デフォルト メソッドを使用すると、ライブラリのインターフェイスに新しい機能を追加し、それらのインターフェイスの古いバージョン用に記述されたコードとのバイナリ互換性を確保できます。

おすすめ記事