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 サイトの他の関連記事を参照してください。