メソッド名の衝突によるインターフェイスの継承
複数のインターフェイスが同一の名前とシグネチャを持つメソッドを定義し、単一のクラスによって実装される場合、コンパイラはを考慮してオーバーライドされたメソッドを識別します。以下:
互換性:
インターフェイス内のメソッドがメソッドと同等である (互換性のある戻り値の型とパラメーターの型を持つ) 場合、メソッドは 1 つだけ継承されます。この場合、コンパイラはメソッドがどのインターフェイスに属しているかを区別する必要はありません。
例:
次のコードを考えてみましょう:
interface A { int f(); } interface B { int f(); } class Test implements A, B { // Only one @Override annotation required @Override public int f() { // Method implementation here return 0; } }
このシナリオでは、Test の f メソッドは A.f と A.f の両方の実装とみなされます。 B.f.
非互換性:
インターフェイス内のメソッドがメソッドと同等ではない (戻り値の型またはパラメーターの型に互換性がない) 場合、コンパイラーはコンパイルを発行します。 error.
例:
次のコードでは、A.f と B.f の戻り値の型が次のとおりであるため、Test の f メソッドはコンパイル エラーになります。 Different:
interface A { void f(); } interface B { int f(); } class Test implements A, B { @Override public int f() { // Method implementation here return 0; } }
Consequences:
複数のインターフェースから継承されたメソッドに互換性がある限り、どのメソッドがどのインターフェースに属するかを区別する必要はありません。コンパイラは、それらをクラスによって実装される単一のメソッドとして扱います。
以上がJava はインターフェイス継承におけるメソッド名の衝突をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。