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