Java でデフォルトのメソッドを明示的に呼び出すにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-25 00:06:23
オリジナル
309 人が閲覧しました

How to Explicitly Call Default Methods in Java?

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 から A.foo() を明示的に呼び出すには、次のコードを使用します。構文:

A.super.foo();
ログイン後にコピー

この構文を使用すると、呼び出される正確なデフォルト実装を指定して、潜在的な競合を解決したり問題をオーバーライドしたりできます。上記の例では、afoo() は次のように実装できます。

public void afoo() {
    A.super.foo();
}
ログイン後にコピー

afoo() 内のコードは、インターフェイス A から foo() のデフォルト実装を呼び出します (インターフェイス A でオーバーライドされている場合でも)。 class B.

さらに、複数のインターフェイスで同じ名前のデフォルト メソッドが定義されている場合は、同じ構文を使用して呼び出す特定の実装を選択できます。たとえば、C がデフォルトの foo() メソッドを持つ別のインターフェイスである場合、次のコードを使用できます。

public class ChildClass implements A, C {
    @Override    
    public void foo() {
       A.super.foo();
       C.super.foo();
    }
}
ログイン後にコピー

このアプローチにより、クラスで使用されるデフォルトの実装を柔軟に制御できます。デフォルトのメソッドを明示的に呼び出すことで、既存のインターフェース定義を変更することなく、競合を解決し、Java 8 のデフォルトのメソッドによって提供される拡張機能を利用できます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート