在我的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之间没有子类型的关系,我不确定我是否理解如何将这些方法称为协变/逆变 .

任何人都可以为我清除这个吗?