Java でのデフォルト メソッドの呼び出し
質問:
デフォルト メソッドを呼び出すことは可能ですか?メソッドがオーバーライドされた場合、または複数のインターフェイスの実装と競合した場合のメソッドの実装はどうなっていますか?次のコードを考えてみましょう:
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? } }
答え:
デフォルトのメソッド A.foo() は、構文 A.super.foo() を使用して明示的に呼び出すことができます。 。この構文を使用すると、メソッドがオーバーライドされているか、競合により使用できない場合でも、メソッドの元の実装にアクセスできます。
例:
A を呼び出す場合。クラス B のメソッド afoo() の foo() を使用すると、次のように使用できます。コード:
public void afoo() { A.super.foo(); }
追加の使用法:
スーパー構文は、他のインターフェイスからデフォルトのメソッドにアクセスするために使用することもできます。たとえば、インターフェイス C にもデフォルトのメソッド foo() がある場合、次のようにクラス B の両方の実装にアクセスできます。
public void bah() { A.super.foo(); // Original `foo()` from interface `A` C.super.foo(); // Original `foo()` from interface `C` }
スーパー構文を使用すると、どのデフォルトの実装を呼び出すかを選択できます。または、独自のメソッドで複数の実装を組み合わせます。
以上がオーバーライドまたは競合している場合に Java でデフォルトのメソッドを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。