2

OOP コースのテストのために勉強しているときに、よくわからない答えを持つこの質問に出くわしました。質問は次のとおりです(翻訳)。

プログラミング言語「Sava」は、次の点を除いてすべての点で Java に似ています。

  1. 構造的に型付けされています
  2. メソッドをオーバーライドすると、引数は反変になり、戻り値の型は共変になります。

次のクラスとインターフェイスが与えられた場合、次の割り当ては有効ですか?

  interface I{
    boolean equals(I i){…}
  } 

  class C{
    boolean equals(C c){…}
  }

I i = new C();

この質問に対する答えは次のとおりです。割り当ては合法ではありません。C の equals メソッドはパラメーターを共変的に変更するため、I の equals メソッドとは一致しません。

最初は、教授が「Implements I」を追加するのを忘れたと思っていましたが、回答には次のようにも記載されていました。それがサブタイプであるかどうかは問題ではありません。

CとIの間にサブタイプの関係がない場合、これらのメソッドを共変/反変と呼ぶ方法を理解しているかどうかはわかりません.

誰かが私のためにこれをクリアできますか?

4

0 に答える 0