java多型的理解

2021-08-04 22:53:17 字數 1371 閱讀 3257

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...