问题描述
- Java动态绑定,对象已经向上转型了,为何优先使用的方法依然是子类的方法。
- 情况如下,我写了个测试类。
son类
public class son extends father
{
public son()
{
fs=""new son"";
}
public void say()
{
System.out.println(""son say()"");
}father类
public class father
{
String fs;father(){ fs=""new father"";}public void say(){ System.out.println(""father say()"");}
}
执行:
father ff=new son();
ff.say(); //“son say()”执行的结果尽然是输出了“son say()”,也就是说执行了son里的say方法,这是怎么回事啊? 而且我将son类中的say()方法删掉后,ff.say()的结果为预期的“father say()”ff对象向上转型后为什么优先执行的方法是子类的方法啊。
解决方案
原来是我概念模糊了,向上转型后的确是只能使用父类才有的方法,但如果子类重写了这个方法,会调用重写的方法。
解决方案二:
JRE的版本是1.8,官网新下的。
解决方案三:
第一:你new了son 说明你这个对象是son,所以say调用的是son的say,而且你使用了继承方法,子类方法覆盖父类的方法的。
解决方案四:
那是继承啊
关键是我已经将ff指向的对象向上转型为father类了啊,对ff变量执行的方法应该是father类的啊
father ff=new son();
ff.say(); //“son say()”
解决方案五:
你没有理解多态呀;
ff是一个father类型又怎么样?它指向的,就是son类。在运行时动态绑定的,就是son的方法。
时间: 2025-01-21 05:37:46