OOP コースのテストのために勉強しているときに、よくわからない答えを持つこの質問に出くわしました。質問は次のとおりです(翻訳)。
プログラミング言語「Sava」は、次の点を除いてすべての点で Java に似ています。
- 構造的に型付けされています
- メソッドをオーバーライドすると、引数は反変になり、戻り値の型は共変になります。
次のクラスとインターフェイスが与えられた場合、次の割り当ては有効ですか?
interface I{
boolean equals(I i){…}
}
class C{
boolean equals(C c){…}
}
I i = new C();
この質問に対する答えは次のとおりです。割り当ては合法ではありません。C の equals メソッドはパラメーターを共変的に変更するため、I の equals メソッドとは一致しません。
最初は、教授が「Implements I」を追加するのを忘れたと思っていましたが、回答には次のようにも記載されていました。それがサブタイプであるかどうかは問題ではありません。
CとIの間にサブタイプの関係がない場合、これらのメソッドを共変/反変と呼ぶ方法を理解しているかどうかはわかりません.
誰かが私のためにこれをクリアできますか?