ホームページ > Java > &#&チュートリアル > Java は、同じメソッド シグネチャを持つ複数のインターフェイスをどのように処理しますか?

Java は、同じメソッド シグネチャを持つ複数のインターフェイスをどのように処理しますか?

Linda Hamilton
リリース: 2024-12-03 03:15:14
オリジナル
391 人が閲覧しました

How Does Java Handle Multiple Interfaces with Identical Method Signatures?

同じメソッド シグネチャを持つ複数のインターフェイスの実装

Java では、クラスが同じ名前とメソッドを定義する複数のインターフェイスを実装する場合、署名を作成すると、どのメソッドが使用されるのかという疑問が生じます。 overridden?

Java 言語仕様 (JLS) に従って、コンパイラは次のルールに基づいてオーバーライドするメソッドを決定します。

< p>複数のインターフェースから継承されたメソッドは「オーバーライド同等」とみなされます (JLS 8.4.8.4)同じ署名がある場合。したがって、必要なメソッド実装は 1 つだけです。

例:

public class Test実装 A, B { <br> public static void main(String... args) throws Exception{ </p>
<p>}</p>
<p>@Override<br> public int f() { // インターフェース A または B から</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return 0;
ログイン後にコピー

}
}
< ;/pre>

このコードでは、クラス Test はインターフェイス A と B を実装します。同じシグネチャを持つ f() という名前のメソッドがあります。これらのメソッドはオーバーライドと同等であるため、どのインターフェイスの f() メソッドが Test.f() によってオーバーライドされるかは問題ではありません。必要な実装は 1 つだけであり、コンパイラは 2 つのインターフェイスを区別しません。

この動作は、継承とメソッドの隠蔽にまで及びます。インターフェイス メソッドがスーパークラスまたは別のインターフェイスのメソッドと競合する場合、コードが有効になるためには、競合するメソッドがオーバーライド同等である必要があります。

互換性の例:

<br>公開インターフェイス ギフト { void present(); }<br>パブリック インターフェイス ゲスト { void present(); }</p>
<p>public class Presentable 実装 Gift, Guest { <br> @Override <br> public void present() {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">System.out.println("Heeeereee's Johnny!!!");
ログイン後にコピー

}
}

ここでは、 Gift と Guest の両方に present() メソッドがあります。 Presentable クラスは両方のインターフェイスを実装し、present() の単一の実装を提供します。コンパイラは、これらのメソッドがオーバーライドと同等であり、個別の実装を必要としないことを認識します。

非互換性の例:

パブリック インターフェイス Gift { void present(); }<br>パブリック インターフェイス ゲスト { boolean present(); }</p><p>public class Presentableimplements Gift, Guest { // コンパイルできません!!!<br> // エラー: Gift と Guest の型に互換性がありません<br>}<br>

この場合、present() メソッドの戻り値の型が異なります。 JLS 8.4.8.3 によれば、オーバーライドするメソッドには互換性のあるシグネチャと戻り値の型が必要です。 Gift.present() と Guest.present() には互換性のある戻り値の型がないため、コードはコンパイルされません。

要約すると、同じメソッド シグネチャを持つ複数のインターフェイスを実装する場合、コンパイラはオーバーライドされるメソッドを、オーバーライドと同等のメソッドとして識別します。これは、どのインターフェースがメソッドを定義しているかに関係なく、必要なメソッド実装は 1 つだけであることを意味します。

以上がJava は、同じメソッド シグネチャを持つ複数のインターフェイスをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:Java EE Web アプリケーションのセキュリティ保護において、WEB-INF ディレクトリはどのような役割を果たしますか? 次の記事:Struts 2 の INPUT 結果: 変換エラーと検証エラーはどのように処理されますか?また、例外ではなく INPUT 結果が返されるのはなぜですか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート