1.當子類重載父類的方法,父類不能引用該方法。只能引用自己的方法。
2.當子類重寫父類的方法,父類引用指向子類對象時,調用的是子類里被重寫的方法。
指向子類的父類引用由于向上轉型了,它只能訪問父類中擁有的方法和屬性,而對于子類中存在而父類中不存在的方法,該引用是不能使用的,盡管是重載該方法。若子類重寫了父類中的某些方法,在調用該些方法的時候,必定是使用子類中定義的這些方法(動態連接、動態調用)。
package com.duotai.homework3;
/*
* 子類
*/
public class RedWine extends Wine{
/*
* 子類重載父類的方法。父類中不存在此方法
*/
public void fun1(String str){
System.out.println("RedWine 的fun1....");
fun2();
}
/*
* 子類重寫父類的方法
* 指向子類的父類引用調用fun2()方法時,必定是調用該方法
*/
public void fun2(){
System.out.println("RedWine的fun2....");
}
}
package com.duotai.homework3;
/*
* 父類
*/
public class Wine {
public void fun1(){
System.out.println("wine的fun1.....");
fun2();
}
public void fun2(){
System.out.println("wine的fun2.....");
}
}
package com.duotai.homework3;
public class WineTest {
public void print(Wine w){
w.fun1();
System.out.println("------------");
w.fun2();
}
public static void main(String[] args) {
Wine w = new RedWine();
WineTest wt = new WineTest();
wt.print(w);
System.out.println("************");
Wine w1 = new Wine();
w1.fun1();
}
}
運行結果:
wine的fun1.....
RedWine的fun2....
------------
RedWine的fun2....
************
wine的fun1.....
wine的fun2.....