由于这不是那么著名的概念,我将做一点介绍。
方法的协变返回类型是在子类中重写该方法时可以用“更窄”类型替换的方法。
所以我可以很好地编译这个小程序(因为 String 是 Object 的子级):
public class House {
Object someMethod(){
return null;
}
}
class DogHouse extends House{
@Override
String someMethod() {
return null;
}
}
规则很容易记住,但我不明白。我的问题是这样的:
为什么DogHouse中someMethod中的返回类型只能与类House中someMethod中的返回类型相同或子类型?我希望这个问题很清楚。
或者..(例如)如果我将返回类型放在类House中的someMethod中,为什么这段代码不会编译?(字符串不是整数的孩子) Integer
“幕后”发生了什么,所以我可以理解它?