オブジェクト指向プログラミングの領域では、クラスは複数のインターフェイスを実装できます。ただし、これらのインターフェイスが同一の署名を持つ方法を持っている場合、疑問が生じます。コンパイラはどのようにどのようなインターフェイス方法を無効にしたかをどのように解決しますか?コンパイラは、インターフェイスの原点に基づいたメソッドを区別しません。 int f(); } インターフェイスB { int f(); } クラステストはA、B {を実装します @オーバーライド public int f(){ 0を返します。 } }
このシナリオでは、テストをテストするAとBの両方を実装し、両方のインターフェイスを同じ署名でf()という名前のメソッドを定義します。この方法をテストでオーバーライドすることにより、クラスは、@Overrideアノテーションが1つしか存在しないにもかかわらず、両方のインターフェイスからF()メソッドを効果的にオーバーライドします。その結果、コンパイラは、インターフェイスの起源に関係なく、遭遇する最初のオーバーライド方法を選択します。そのような場合、コンパイラはエラーを報告します。同じ署名の2つのメソッドを同じクラスに格納することは不可能です。 void present(); } インターフェイスゲスト{ boolean present(); } クラスプレゼンテーション可能な実装ギフト、ゲスト{ @オーバーライド public void present(){ system.out.println( "贈与として存在!"); } }
ここ、gift.present()およびguest.present()は互換性のないリターンタイプ(void vs. boolean)を持っています。その結果、上書きのルールに違反しているため、プレゼンテーションは両方のインターフェイスを実装できません。ただし、メソッドシグネチャ間の非互換性は、コンパイルエラーにつながります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3