class a
public void show(a obj)
}
class b extends a
public void show(a obj)
}
class c extends b{}
class d extends b{}
a a1 = new a();
a a2 = new b();
b b = new b();
c c = new c();
d d = new d();
a1.show(b);
a1.show(c);
a1.show(d);
a2.show(b);
a2.show(c);
a2.show(d);
b.show(b);
b.show(c);
b.show(d);
答案如下:
a and a
a and a
a and d
b and a
b and a
a and d
b and b
b and b
a and d
經上機實驗,卻是如此。下面來解釋原因。
對於多型,可以總結以下幾點:
一、使用父類型別的引用指向子類的物件;
二、該引用只能呼叫父類中定義的方法和變數;
三、如果子類中重寫了父類中的乙個方法,那麼在呼叫這個方法的時候,將會呼叫子類中的這個方法;(動態連線、動態呼叫)
四、變數不能被重寫(覆蓋),」重寫「的概念只針對方法,如果在子類中」重寫「了父類中的變數,那麼在編譯時會報錯。
五、this(tihs),super(this),this(super),super(super)//多態函式的呼叫優先順序
拿到例子先看兩個地方,物件型別和引數型別。
1-3號是一種型別,只分析乙個。a1.show(b),物件型別為a,引數型別為b,嚴格對應的有沒有? 沒有。那麼用第五條,捋到第三個this(super)發現可以匹配,那麼輸出a and a。
4,5號。a2.show(b),物件型別為b,引數型別為b,嚴格對應的有嗎? 有。但是這個b.(b)在a中沒定義,所以不能用。還是得用第五條捋阿,捋到最後,super(super),可以了,但是b已經重寫了該方法,所以輸出a and b。(對應了第三條)
6號捋到super(this)。
7號嚴格對應。
8號this(super)。
9號super(this)。
Java 多型的理解
物件導向程式設計有三個特徵,即封裝 繼承和多型。封裝隱藏了類的內部實現機制,從而可以在不影響使用者的前提下改變類的內部結構,同時保護了資料。繼承是為了重用父類 同時為實現多型性作準備。那麼什麼是多型呢?要理解多型性,首先要知道什麼是 向上轉型 我定義了乙個子類cat,它繼承了animal類,那麼後者...
Java多型的理解
要想清楚的理解什麼是多型,就必須要了解 向上轉型 這個概念。下面我們通過乙個例子來介紹向上轉型。public class person protected void sleep public void play public class student extends person public c...
java多型的理解
public string show d obj public string show a obj class b extends a public string show b obj public string show a obj class c extends b class d extend...