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