java 父類子類有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn)
父類引用默認(rèn)調(diào)用子類重寫的方法
如果父類的引用p指向了子類的實(shí)例,則通過(guò)這個(gè)引用p訪問(wèn)同名方法時(shí),調(diào)用的是子類重寫的方法。
父類引用p可以指向不同的子類,調(diào)用不同子類重寫的不同的同名方法,進(jìn)而達(dá)到類間多態(tài)的效果。
但是,父類的引用只能訪問(wèn)子類重寫的方法,父類中沒(méi)有的方法,父類的引用不能訪問(wèn)。也就是說(shuō),通過(guò)父類的引用來(lái)調(diào)用子類的方法時(shí),不能訪問(wèn)到子類后來(lái)自己定義的方法。
子類引用默認(rèn)調(diào)用自定義的方法
通過(guò)子類的引用訪問(wèn)同名方法時(shí),默認(rèn)是重寫之后的同名方法。
子類通過(guò)super關(guān)鍵字來(lái)調(diào)用被隱藏的父類方法
如果還要訪問(wèn)父類的同名方法,可以使用super關(guān)鍵字來(lái)顯示調(diào)用。
多態(tài)
多態(tài)存在的三個(gè)必要條件:要有繼承、要有重寫、父類變量引用子類對(duì)象。
重寫原則:兩同兩小一大
兩同:
方法名相同
形參列表要相同
兩小
拋出的異常類型小于等于父類方法拋出的異常類型,也就是要么是原來(lái)的異常類型(相等),要么是原來(lái)異常類型的子類(更小)
返回值類型要小于等于比父類的返回值類型,也就是要么返回原來(lái)的返回值類型(相等),要么是原來(lái)的返回值類型的子類(更小)
一大
子類重寫的方法的訪問(wèn)權(quán)限要大于等于父類方法的訪問(wèn)權(quán)限:
如果原來(lái)的訪問(wèn)類型為public,則重寫的方法的訪問(wèn)權(quán)限只能是public。
在Java 8之前,Java接口的方法默認(rèn)使用public abstract修飾,所以實(shí)現(xiàn)接口方法時(shí),訪問(wèn)權(quán)限只能是public。
重載原則:兩同一不同
兩同
重載發(fā)生在同一個(gè)類中,
跟繼承沒(méi)有關(guān)系.
一不同
形參列表不同
如何判斷是重載還是重寫
看形參列表:
當(dāng)方法名相同,形參也相同的時(shí)候,就是重寫,此時(shí)還需要滿足重寫的其他條件,不然就會(huì)出現(xiàn)錯(cuò)誤。
當(dāng)方法名相同,但是形參列表不同的時(shí)候,就是重載
覆蓋和重載的區(qū)別
對(duì)形參列表的要求不同
重寫要求形參列表要相同,
而重載要求形參列表不相同
對(duì)拋出的異常的要求不同
重寫要求拋出的異常更小或相等
重載對(duì)拋出的異常沒(méi)有要求
對(duì)返回值類型的要求不同
重寫要求返回值類型更小或相等
重載對(duì)返回值類型沒(méi)有要求
對(duì)訪問(wèn)權(quán)限的要求不同
重寫要求訪問(wèn)權(quán)限要更大或相等,
而重載對(duì)訪問(wèn)權(quán)限沒(méi)有要求
發(fā)生的范圍不同
重寫發(fā)生子類繼承父類的時(shí)候
重載發(fā)生在同一個(gè)類中,和繼承沒(méi)有關(guān)系.
重載和重寫的相同點(diǎn)
方法名要相同
補(bǔ)充知識(shí):java中子類繼承父類和實(shí)現(xiàn)接口有同名方法怎么處理
Java是一門單繼承語(yǔ)言,但是,在子類的繼承關(guān)系中,會(huì)存在父類和接口有同名方法的情況,這種情況該怎么處理呢?
我們來(lái)一步步驗(yàn)證:
1.子類繼承父類,實(shí)現(xiàn)接口,父類和接口有同名方法
以上這篇java 父類子類有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
public interface MyInterface { void test();}
public class Father { public void test() { System.out.println('父類方法'); }}
public class Son extends Father implements MyInterface{}
子類直接繼承父類和實(shí)現(xiàn)接口不實(shí)現(xiàn)接口方法不報(bào)錯(cuò),說(shuō)明這種情況下默認(rèn)父類實(shí)現(xiàn)該方法
2.我們將父類中方法注釋掉,看看結(jié)果
public interface MyInterface { void test();}public class Father {// public void test() {// System.out.println('父類方法');// }}
很明顯,子類在繼承過(guò)程中出現(xiàn)了錯(cuò)誤提示,需要實(shí)現(xiàn)接口中的方法
3.將父類中方法取消注釋,子類實(shí)現(xiàn)該方法,代碼如下:
public interface MyInterface { void test();}public class Father { public void test() { System.out.println('父類方法'); }}
可以看到,子類方法提示是重寫的父類方法。
至此,驗(yàn)證完畢!
以上這篇java 父類子類有同名方法時(shí)如何調(diào)用的實(shí)現(xiàn)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. XML入門的常見(jiàn)問(wèn)題(四)2. HTML5 Canvas繪制圖形從入門到精通3. ASP基礎(chǔ)知識(shí)VBScript基本元素講解4. 利用CSS3新特性創(chuàng)建透明邊框三角5. asp(vbscript)中自定義函數(shù)的默認(rèn)參數(shù)實(shí)現(xiàn)代碼6. 使用Spry輕松將XML數(shù)據(jù)顯示到HTML頁(yè)的方法7. 詳解CSS偽元素的妙用單標(biāo)簽之美8. JSP的Cookie在登錄中的使用9. XHTML 1.0:標(biāo)記新的開(kāi)端10. PHP設(shè)計(jì)模式中工廠模式深入詳解
