代碼......父類......public class Person {public Person(){
}public void dri(){
System.out.println("這是父類中的dri");
}}......子類......public class Son extends Person{public Son(){ super();
}public void dri(){
System.out.println("這是子類中的dri");
}public static void main(String[] args){
Person p=new Son();
p.dri();//輸出:這是子類中的dri}}疑問:Person p=new Son();這里p引用指向子類中的實類new Son();這里應(yīng)該是向上轉(zhuǎn)型吧,向上轉(zhuǎn)型會丟失子類特有的方法,為啥這里沒有調(diào)用父類中的dri()方法,而是調(diào)用的是子類中的dir()方法呢??奇怪了
1 回答

呼如林
TA貢獻1798條經(jīng)驗 獲得超3個贊
你這是父類的引用指向子類的對象,是java多態(tài)的體現(xiàn)。根據(jù)“編譯看左邊,運行看右邊”的原則,編譯時認為Person對象有dri()方法,不報錯,運行時則因為p實際是一個Son對象,而執(zhí)行Son的dri方法。其實向上轉(zhuǎn)型,丟失的是子類獨有的方法,而同名方法,則不會丟失,這也是interface的意義啊。
添加回答
舉報
0/150
提交
取消