更新時(shí)間:2019-09-17 11:38:09 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3883次
今天動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編為大家分享Java繼承多態(tài)經(jīng)典案例,希望通過(guò)此文能夠幫助到大家,下面就隨小編一起看看Java繼承多態(tài)經(jīng)典案例。
public class A {
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("A and A");
}
}
public class B extends A {
public String show(B obj) {
return ("B and B");
}
public String show(A obj) {
return ("B and A");
}
}
public class C extends B{
}
public class D extends B{
}
public class Demo2 {
public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a1.show(b)); // A and A
System.out.println(a1.show(c)); // A and A
System.out.println(a1.show(d)); // A and D
System.out.println(a2.show(b)); // B and A
System.out.println(a2.show(c)); // B and A
System.out.println(a2.show(d)); // A and D
System.out.println(b.show(b)); // B and B
System.out.println(b.show(c)); // B and B
System.out.println(b.show(d)); // A and D
}
}
分析:
多態(tài)的兩種形式:1、父類做形參,子類做實(shí)參。2、父類的引用指向子類的實(shí)例對(duì)象。
首先分析一個(gè)各個(gè)類所具有的方法。
A:public String show(D obj); public String show(A obj);
B:public String show(D obj); public String show(A obj); public String show(B obj); public String show(A obj);-(被重寫)
C:public String show(D obj); public String show(A obj); public String show(B obj); public String show(A obj);-(被重寫)
D:public String show(D obj); public String show(A obj); public String show(B obj); public String show(A obj);-(被重寫)
執(zhí)行程序。
A a1 = new A();A a2 = new B();,a1 是多態(tài)形式1??慈缦麓a。System.out.println(a1.show(b));A中的show方法只有D A 做形參,沒(méi)有B做形參的,然而A是B的父類,所以,這里實(shí)現(xiàn)的是多態(tài)形式1。 System.out.println(a1.show(c));同上一個(gè),A是C的間接父類。System.out.println(a1.show(d));由于有D做形參的方法,所以直接使用。
System.out.println(a2.show(b));這個(gè)比較復(fù)雜, 明確一點(diǎn)很重要:a2是A類的引用,只能引用A中已有的方法,沒(méi)有的方法不能引用,有人會(huì)說(shuō)為什么不是 “B and B”,輸出“B and B”的方法是子類B的方法,顯然不會(huì)調(diào)用。具體過(guò)程而是查看A中的方法,發(fā)現(xiàn)沒(méi)有以B為參數(shù)的方法,但有以A為參數(shù)的方法,父類為形參,這里又是第一種形式的多態(tài),于是就調(diào)用這個(gè)方法,但是這個(gè)方法在B中重寫了,所以就會(huì)調(diào)用子類的方法輸出“B and A”。System.out.println(a2.show(c));同理,C的間接父類是A。System.out.println(a2.show(d)); A中有以D為參數(shù)的方法,直接調(diào)用。
System.out.println(b.show(b));查看B中有沒(méi)有以B為參數(shù)的方法,直接調(diào)用B的以B為參數(shù)的方法。System.out.println(b.show(c)); 查看B中有沒(méi)有以C為參數(shù)的方法,但是沒(méi)有,于是查找父類中有沒(méi)有以B為參數(shù)的方法。也沒(méi)有,于是查找B中有沒(méi)有以父類B為參數(shù)的方法,索性,這里有所以就調(diào)用。假設(shè),這里沒(méi)有的話,就會(huì)繼續(xù)查找有沒(méi)有以間接父類A為參數(shù)的方法。System.out.println(b.show(d)); 查找B中有沒(méi)有以D為參數(shù)的方法,但是沒(méi)有,于是看看從父類繼承來(lái)的方法中有沒(méi)有以D為參數(shù)的方法,顯然有,所以調(diào)用并輸出。
總結(jié)
明確多態(tài)的兩種形式,謹(jǐn)記父類引用只能調(diào)用父類的方法,不能調(diào)用子類中的方法。如果調(diào)用到了子類的方法,那么一定是子類中重寫的方法。
super關(guān)鍵字用于調(diào)用子類中從父類繼承得到的成員變量和方法,this關(guān)鍵字用于調(diào)用當(dāng)前對(duì)象的屬性和方法。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編為大家分享的“Java繼承多態(tài)經(jīng)典案例”的內(nèi)容,希望對(duì)大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。
相關(guān)免費(fèi)視頻教程推薦
java繼承視頻教程下載——繼承案例:http://www.soulsinkind.com/xiazai/2606.html
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)