ホームページ >Java >&#&チュートリアル >Java はインターフェイス継承におけるメソッド名の衝突をどのように処理しますか?

Java はインターフェイス継承におけるメソッド名の衝突をどのように処理しますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-06 00:12:12189ブラウズ

How Does Java Handle Method Name Collisions in Interface Inheritance?

メソッド名の衝突によるインターフェイスの継承

複数のインターフェイスが同一の名前とシグネチャを持つメソッドを定義し、単一のクラスによって実装される場合、コンパイラはを考慮してオーバーライドされたメソッドを識別します。以下:

互換性:

インターフェイス内のメソッドがメソッドと同等である (互換性のある戻り値の型とパラメーターの型を持つ) 場合、メソッドは 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。