情況如下,我寫了個測試類。
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對象向上轉型後為什麼優先執行的方法是子類的方法啊。
原來是我概念模糊了,向上轉型後的確是只能使用父類才有的方法,但如果子類重寫了這個方法,會調用重寫的方法。