Java インターフェースの実装とメソッド名の衝突
Java で複数のインターフェースを実装する場合、メソッド名の衝突が発生する可能性があります。これは、異なる目的を持つインターフェイスが同じシグネチャを持つメソッドを定義している場合に発生します。明示的なインターフェイス実装により同じメソッドの複数の実装が許可される C# とは異なり、Java には同様のメカニズムがありません。
Java の制限の理由
Java では、次のメソッドの複数の実装が禁止されています。潜在的な曖昧さや混乱を防ぐために同じ方法を使用します。これにより、呼び出しインターフェイスに関係なく、メソッド呼び出しが常に同じ基になる実装を呼び出すことが保証されます。
例
次のコードを考えてみましょう:
interface ISomething { void doSomething(); } interface ISomething2 { void doSomething(); } class Impl implements ISomething, ISomething2 { void doSomething() {} // Java only allows one implementation of this method. }
この例では、Impl クラスの doSomething() メソッドの 2 つの個別の実装をそれぞれに定義する方法はありません。
回避策
呼び出し側インターフェイスに基づいて個別の動作が必要な場合は、特定の実装を実装する個々のクラスに委任する複合クラスを作成することにより、合成アプローチの使用を検討してください。インターフェイス:
class CompositeClass { ISomething class1; ISomething2 class2; void doSomething1(){class1.doSomething();} void doSomething2(){class2.doSomething();} }
このソリューションでは、CompositeClass は、別々のクラスに委任しながら両方のインターフェイスを実装するためのファサードを提供します。特定のメソッドの実装については。
以上が複数のインターフェイスを実装する場合、Java はメソッド名の衝突をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。