gpt4 book ai didi

java - 如何在需要称为协方差的父类(super class)型的方法中返回子类型?

转载 作者:行者123 更新时间:2023-12-04 05:24:31 25 4
gpt4 key购买 nike

维基百科定义 covariance作为

converting from wider (Animals) to narrower (Cats).



但在诸如 Java 之类的语言中,返回类型协方差定义为将子类型分配给父类(super class)型,例如:
public Animal getAnimal(){
return new Cat();
}

在这里,我们将子类型分配给父类(super class)型,但根据 Wikipedia定义,协方差是为子类型分配一个父类(super class)型。我怎样才能调和两者?

最佳答案

您对协变返回类型的含义有误解。

它仅在您覆盖方法时相关,它不涉及 return 语句中使用的类型或调用者对方法的期望。
协变返回类型意味着您可以覆盖子类型中的方法并在覆盖期间更改返回类型(为其提供比父类(super class)型中的方法更窄的返回类型)。

示例:

public class SuperType {
public Animal getAnimal() { ... }
}

public class SubType extends SuperType {
public Cat getAnimal() { ... }
}

这里与维基百科的定义相匹配。

Java Language Specificationsection 8.4.8.3 中确认了这一点(参见 example 8.4.8.3-1)。

请注意,对于方法参数,Java 需要逆变类型。如 getAnimal接受类型为 Animal 的参数在 SuperType ,类(class) SubType无法将此参数缩小到 Cat ,但可以将其扩大到(例如) Object .

关于java - 如何在需要称为协方差的父类(super class)型的方法中返回子类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com