今天深圳達內(nèi)教育java培訓機構小編為大家分享Java繼承多態(tài)經(jīng)典案例,希望通過此文能夠幫助到大家,下面就隨小編一起看看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、父類做形參,子類做實參。2、父類的引用指向子類的實例對象。
首先分析一個各個類所具有的方法。
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 做形參,沒有B做形參的,然而A是B的父類,所以,這里實現(xiàn)的是多態(tài)形式1。 System.out.println(a1.show(c));同上一個,A是C的間接父類。System.out.println(a1.show(d));由于有D做形參的方法,所以直接使用。
System.out.println(a2.show(b));這個比較復雜, 明確一點很重要:a2是A類的引用,只能引用A中已有的方法,沒有的方法不能引用,有人會說為什么不是 “B and B”,輸出“B and B”的方法是子類B的方法,顯然不會調(diào)用。具體過程而是查看A中的方法,發(fā)現(xiàn)沒有以B為參數(shù)的方法,但有以A為參數(shù)的方法,父類為形參,這里又是第一種形式的多態(tài),于是就調(diào)用這個方法,但是這個方法在B中重寫了,所以就會調(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中有沒有以B為參數(shù)的方法,直接調(diào)用B的以B為參數(shù)的方法。System.out.println(b.show(c)); 查看B中有沒有以C為參數(shù)的方法,但是沒有,于是查找父類中有沒有以B為參數(shù)的方法。也沒有,于是查找B中有沒有以父類B為參數(shù)的方法,索性,這里有所以就調(diào)用。假設,這里沒有的話,就會繼續(xù)查找有沒有以間接父類A為參數(shù)的方法。System.out.println(b.show(d)); 查找B中有沒有以D為參數(shù)的方法,但是沒有,于是看看從父類繼承來的方法中有沒有以D為參數(shù)的方法,顯然有,所以調(diào)用并輸出。
總結
明確多態(tài)的兩種形式,謹記父類引用只能調(diào)用父類的方法,不能調(diào)用子類中的方法。如果調(diào)用到了子類的方法,那么一定是子類中重寫的方法。
super關鍵字用于調(diào)用子類中從父類繼承得到的成員變量和方法,this關鍵字用于調(diào)用當前對象的屬性和方法。
以上就是深圳達內(nèi)教育java培訓機構小編為大家分享的“Java繼承多態(tài)經(jīng)典案例”的內(nèi)容,希望對大家有幫助,更多java最新資訊請繼續(xù)關注深圳達內(nèi)教育java培訓機構官網(wǎng),每天會有精彩內(nèi)容分享與你。
相關免費視頻教程推薦
java繼承視頻教程下載——繼承案例:http://www.bjpowernode.com/xiazai/2606.html