自从我尝试过以来,我发现它不起作用。我只是无法解释为什么它必须是这样的。
public int getValue() {
return 2 * a;
}
public String getValue() {
return "" + b * super.getValue();
}
第二个方法来自一个类,该类是实现第一个 getValue() 方法的类的子类。
为什么相同的名称不足以覆盖该方法?我想到的唯一论点是,这将违背“is a”关系,因为用 A 扩展的第二个方法的类必须具有与 A 相同的能力,并且如果您重写 return你违反了这条法律,对吗?
最佳答案
这是为了防止出现这样的情况
class Base {
public int getValue(){
return 42;
}
}
class Derived extends Base{
public String getValue(){
return "42";
}
}
现在这里应该返回什么?
Base b = new Derived();
int value = b.getValue();
由于 b
是 Base
类型引用,我们应该能够安全地假设 getValue
的结果将为 int
,但由于后期绑定(bind)(动态绑定(bind))getValue
将从 Derived
类执行代码,因此它将返回 String "42"
不是int
,这会导致问题。
更改重写方法的返回类型是安全的唯一情况是新返回类型扩展/实现旧返回类型:
public Fruit getValue(){
....
}
可以用类似的东西覆盖
public Banana getValue(){
....
}
关于java - 继承同名但返回类型不同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472585/