我有类似的设置:
public class Base {
public String getApple() {return "base apple"};
}
public class Extended extends Base{
public String getApple() {return "extended apple"};
}
我在代码中的其他地方有这个:
{
Base b = info.getForm();
if (b instanceof Extended){
b = (Extended) b;
}
System.out.println(b.getApple()); // returns "base apple" even when if clause is true why??
}
我该怎么做?
最佳答案
第一:
if (b instanceof Extended){
b = (Extended) b;
}
什么也没做。您基本上是说
b = b
,什么也没说。您甚至都没有更改参考。其次,
getApple()
将始终是动态绑定的,并且应始终调用“扩展的苹果”-假定子类确实是对基类的扩展,并且方法是真正的重写。基本上,您需要执行以下操作才能完成正确的
getApple()
行为:删除if子句。它什么也没做。
确保您的课程确实在扩展基础课程
确保
getApple()
方法将覆盖基类方法。 (如果不确定,请使用@override
批注)