在我的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这一事实的答案并未被接受,因为它是一种结构类型语言,如果它是一个子类型则无关紧要。
如果C和I之间没有子类型的关系,我不确定我是否理解如何将这些方法称为协变/逆变。
任何人都可以为我解决这个问题吗?