父類引用預設調用子類重寫的方法
如果父類的引用p指向了子類的執行個體,則通過這個引用p通路同名方法時,調用的是子類重寫的方法。
父類引用p可以指向不同的子類,調用不同子類重寫的不同的同名方法,進而達到類間多态的效果。
但是,父類的引用隻能通路子類重寫的方法,父類中沒有的方法,父類的引用不能通路。也就是說,通過父類的引用來調用子類的方法時,不能通路到子類後來自己定義的方法。
子類引用預設調用自定義的方法
通過子類的引用通路同名方法時,預設是重寫之後的同名方法。
子類通過super關鍵字來調用被隐藏的父類方法
如果還要通路父類的同名方法,可以使用super關鍵字來顯示調用。
多态
多态存在的三個必要條件:要有繼承、要有重寫、父類變量引用子類對象。
重寫原則:兩同兩小一大
兩同:
方法名相同
形參清單要相同
兩小
抛出的異常類型小于等于父類方法抛出的異常類型,也就是要麼是原來的異常類型(相等),要麼是原來異常類型的子類(更小)
傳回值類型要小于等于比父類的傳回值類型,也就是要麼傳回原來的傳回值類型(相等),要麼是原來的傳回值類型的子類(更小)
一大
子類重寫的方法的通路權限要大于等于父類方法的通路權限:
如果原來的通路類型為public,則重寫的方法的通路權限隻能是public。
在Java 8之前,Java接口的方法預設使用public abstract修飾,是以實作接口方法時,通路權限隻能是public。
重載原則:兩同一不同
兩同
重載發生在同一個類中,
跟繼承沒有關系.
一不同
形參清單不同
如何判斷是重載還是重寫
看形參清單:
當方法名相同,形參也相同的時候,就是重寫,此時還需要滿足重寫的其他條件,不然就會出現錯誤。
當方法名相同,但是形參清單不同的時候,就是重載
覆寫和重載的差別
對形參清單的要求不同
重寫要求形參清單要相同,
而重載要求形參清單不相同
對抛出的異常的要求不同
重寫要求抛出的異常更小或相等
重載對抛出的異常沒有要求
對傳回值類型的要求不同
重寫要求傳回值類型更小或相等
重載對傳回值類型沒有要求
對通路權限的要求不同
重寫要求通路權限要更大或相等,
而重載對通路權限沒有要求
發生的範圍不同
重寫發生子類繼承父類的時候
重載發生在同一個類中,和繼承沒有關系.
重載和重寫的相同點
方法名要相同
補充知識:java中子類繼承父類和實作接口有同名方法怎麼處理
Java是一門單繼承語言,但是,在子類的繼承關系中,會存在父類和接口有同名方法的情況,這種情況該怎麼處理呢?
我們來一步步驗證:
1.子類繼承父類,實作接口,父類和接口有同名方法
以上這篇java 父類子類有同名方法時如何調用的實作就是小編分享給大家的全部内容了,希望能給大家一個參考,也希望大家多多支援聚米學院。
public interface MyInterface {
void test();
}
public class Father {
public void test() {
System.out.println("父類方法");
}
}
public class Son extends Father implements MyInterface{}
子類直接繼承父類和實作接口不實作接口方法不報錯,說明這種情況下預設父類實作該方法
2.我們将父類中方法注釋掉,看看結果
public interface MyInterface {
void test();
}
public class Father {
// public void test() {
// System.out.println("父類方法");
// }
}
很明顯,子類在繼承過程中出現了錯誤提示,需要實作接口中的方法
3.将父類中方法取消注釋,子類實作該方法,代碼如下:
public interface MyInterface {
void test();
}
public class Father {
public void test() {
System.out.println("父類方法");
}
}
可以看到,子類方法提示是重寫的父類方法。
至此,驗證完畢!
以上這篇java 父類子類有同名方法時如何調用的實作就是小編分享給大家的全部内容了,希望能給大家一個參考,也希望大家多多支援聚米學院。