Java インターフェイス実装におけるメソッド シグネチャの衝突の克服
2 つの異なるインターフェイスがメソッド シグネチャを共有する状況では、両方のインターフェイスを 1 つのクラスに実装すると、次のことが可能になります。 Java では同じものを複数実装することができないため、これには課題があります。 method.
従来のアプローチ: メソッドのオーバーライド
Java は通常、メソッドのオーバーライドを通じてメソッド シグネチャの衝突を解決します。サブクラスが親クラスと同じシグネチャを持つメソッドを定義している場合、サブクラスのメソッドが親クラスのメソッドを置き換えます。ただし、このアプローチは、個別のインターフェイスを実装する場合には適していません。
代替ソリューション: 合成
Java は、合成による代替ソリューションを提供します。両方のインターフェイスを直接実装する代わりに、各インターフェイスを実装する別のクラスに委任するクラスを作成します。
interface ISomething { void doSomething(); } interface ISomething2 { void doSomething(); } class Class1 implements ISomething { @Override public void doSomething() {} } class Class2 implements ISomething2 { @Override public void doSomething() {} } class CompositeClass { Class1 class1; Class2 class2; void doSomething1() { class1.doSomething(); } void doSomething2() { class2.doSomething(); } }
この例では、CompositeClass は Class1 と Class2 を構成し、重複したメソッドを明示的に定義せずに ISomething と ISomething2 の両方を実装します。 doSomething1 メソッドと doSomething2 メソッドはそれぞれのクラスに委任し、目的の動作を維持します。
このアプローチでは、メソッドのオーバーライドや条件付きロジックの複雑さを伴うことなく、単一のクラスに個別のインターフェイスを実装できるため、メソッド シグネチャの衝突が効果的に解決されます。
以上が複数のインターフェースを実装する場合、Java クラスはメソッド署名の競合をどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。