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 的事实的答案,因为鉴于它是一种结构类型的语言,它没有不管它是否是一个子类型。

如果 C 和 I 之间没有子类型关系,我不确定我是否理解我们如何将这些方法称为协变/逆变。

谁能帮我解决这个问题?

4

0 回答 0