Java,强类型,协方差和反差

时间:2013-10-16 20:41:54

标签: java covariance contravariance structural-typing

在我的OOP课程中学习考试时,我遇到了一个问题,我得到了一个我不太懂的答案。问题如下(翻译):

编程语言“Sava”在各方面都与Java类似,除了以下内容:

  1. 它的结构类型
  2. 当覆盖方法时,参数可以是逆变的,返回类型可以是协变的。
  3. 鉴于以下类和接口,以下任务是否合法?

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

    任何人都可以为我解决这个问题吗?

0 个答案:

没有答案
相关问题