Java では、複数のインターフェイスが同一のシグネチャを持つメソッドを定義する場合、それらをクラスに実装するとあいまいさが生じる可能性があります。 C# の明示的なインターフェイス実装とは異なり、Java はこの問題に対する直接的な解決策を提供しません。
このシナリオの解決策を提供するために、Java は、クラスが特定のシグネチャを持つメソッドの実装を 1 つだけ提供できるように強制します。したがって、同じ名前のメソッドを使用して 2 つの異なるインターフェイスを実装することはできません。
ただし、この状況に対処する別のアプローチがあります。
構成:
両方のインターフェイスを直接実装する代わりに、2 つのインターフェイスのインスタンスを含む複合クラスを作成します。 (例: ISomething および ISomething2)。複合クラスは、適切なインターフェイス メソッドへの呼び出しを委任し、実装を効果的に分離できます。
class CompositeClass { ISomething something1; ISomething2 something2; void doSomething1() { something1.doSomething(); } void doSomething2() { something2.doSomething(); } }
アダプター デザイン パターン:
アダプター クラスを使用して、一方のインターフェイスのメソッドをもう一方のインターフェイスのシグネチャに適合させます。これにより、実際の呼び出し元に基づいて動作をカスタマイズできる、より柔軟な実装が可能になります。
class ISomethingAdapter implements ISomething2 { ISomething something; @Override public void doSomething() { // Custom behavior based on the caller something.doSomething(); } }
これらの代替アプローチを利用することで、Java 開発者は、メソッド名の衝突を効果的に解決しながら、メソッド名の衝突を効果的に解決できます。コードの整合性を確保し、メソッド実装のあいまいさを回避します。
以上がJava はインターフェイス実装におけるメソッド名の衝突をどのように解決しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。