java基礎整理 父類引用指向子類物件實體的多型

2021-07-02 22:31:31 字數 1004 閱讀 2790

在我學習多型的過程中,我碰見父類物件引用指向子類物件實體的情況,

father obj = new son();
為此,我對於其呼叫哪些方法以及的其具體的結構產生的一些疑問,

下面是我的一些看法。

一般的建立物件是是這樣的 

class obj = new class();
這兩段**唯一的區別就是new 後面的**不同。

下面是我的一些看法:

一般的建立物件,是在棧空間中宣告乙個變數,這和普通基本資料型別變數相似,

第二段**:

用obj物件呼叫方法,其實是呼叫class類的成員方法。

接下類看第一段**:

那麼問題來了,呼叫的方法是誰的呢?我做了一些測試

class parent 

}class son extends parent

public void show()

}class goon

}

執行的結果:

是的,顯示的是子類的,

但是把子類重寫的方法注釋掉呢:

那麼結果是父類的。

那麼試下呼叫子類特有的方法,結果是編譯報錯。

這樣我就有思路了:

在父類物件引用指向子類物件實體的時候,呼叫的是子類的成員,

因為子類繼承了父類的成員,所以才能呼叫。

但是因為變數的父類型別的,所以只能呼叫子類繼承的父類的成員,而不能呼叫子類所特有的成員

那麼又有乙個問題了——為什麼呼叫print()方法時候結果顯示子類的結果呢?是不是呼叫子類的的方法呢?

答案是:是的。

這是為什麼呢?

那是因為子類重寫了父類的print()方法,當試圖呼叫子類所繼承的父類的print()方法時,,它被「擋住了「。

子類重寫父類方法時,其實已經覆蓋了父類被重寫的方法

所以,在這種多型的情況下,

物件引用只能呼叫子類中父類已經宣告的成員。

父類引用指向子類物件

要理解多型性,首先要知道什麼是 向上轉型 我定義了乙個子類cat,它繼承了animal類,那麼後者就是前者是父類。我可以通過 cat c new cat 例項化乙個cat的物件,這個不難理解。但當我這樣定義時 animal a new cat 這代表什麼意思呢?很簡單,它表示我定義了乙個animal...

父類引用指向子類物件

是多型的一種實現方式 這樣做使程式靈活性更好,若有多個子類,只需改變引用就能實現不同的功能,而不需要改變程式 父類 a 子類 a1,a2 a obj1 new a1 a obj2 new a2 如果a有乙個方法是show 子類實現了show 那麼obj1.show 就是第乙個子類的show obj2...

父類引用指向子類物件

package fuleiyinyongzhixiang public class animal public void sleep package fuleiyinyongzhixiang public class person extends animal public void play pa...