ホームページ >Java >&#&チュートリアル >オーバーライド後に Java インターフェイスのデフォルト メソッドを明示的に呼び出すにはどうすればよいですか?

オーバーライド後に Java インターフェイスのデフォルト メソッドを明示的に呼び出すにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-11 18:33:10759ブラウズ

How Can I Explicitly Call a Java Interface's Default Method After Overriding?

Java でのデフォルト メソッドの明示的な呼び出し

Java 8 では、インターフェイスにデフォルト メソッドが導入され、既存の実装を変更せずにインターフェイスの拡張が可能になりました。ただし、疑問が生じます。メソッドがオーバーライドされている場合、または異なるインターフェイスに複数のデフォルト実装があるために競合が存在する場合、メソッドのデフォルト実装を明示的に呼び出すことができますか?

次の例を考えてみましょう:

interface A {
    default void foo() {
        System.out.println("A.foo");
    }
}

class B implements A {
    @Override
    public void foo() {
        System.out.println("B.foo");
    }
    public void afoo() {
        // How to invoke A.foo() here?
    }
}

クラス B の afoo() から A.foo() のデフォルト実装を明示的に呼び出すには、構文:

A.super.foo();

このアプローチにより、メソッドがオーバーライドされている場合や、他のデフォルト実装と競合している場合でも、メソッドの元のデフォルト実装にアクセスできます。

より複雑なシナリオの場合、複数のインターフェイスに同じ名前のデフォルト メソッドが含まれている場合、同じ構文を使用して、必要な特定のデフォルト実装を選択できます。 use:

public class ChildClass implements A, C {
    @Override
    public void foo() {
       // Override and do something else

       // Or manage conflicts
       A.super.foo();
       C.super.foo(); // Default implementation from C
    }

    public void bah() {
       A.super.foo(); // Default implementation from A
       C.super.foo(); // Default implementation from C
    }
}

デフォルトのメソッドを明示的に呼び出すことで、オーバーライドのコントラクトを破ることなく、インターフェイスの拡張方法を制御し、競合を解決し、必要に応じて元の実装にアクセスできます。これにより、インターフェースベースの設計に柔軟性とカスタマイズ性が提供されます。

以上がオーバーライド後に Java インターフェイスのデフォルト メソッドを明示的に呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。