在我的 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 之间没有子类型关系,我不确定我是否理解我们如何将这些方法称为协变/逆变。
谁能帮我解决这个问题?