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的方法。