對多型的一些理解

2021-10-07 22:45:43 字數 1903 閱讀 3829

相信許多小夥伴初次學習多型都是一臉懵逼,不知道在講什麼。在這裡我將把自己對多型的理解分享給大家。

本人口述能力有限,在這裡用**來解釋多型

class

person

}

這是乙個父類person,有乙個屬性name和乙個方法eat 。再寫乙個子類student,如下

class

student

extends

person

//特有方法study

public

void

study()

}

那麼在宣告物件的時候,一般情況下會這樣寫:

person p =

newperson()

;//或者

student s =

newstudent()

;

***********************************==

如果說我們這樣建立乙個新的物件的話:

person p =

newstudent()

;

這樣就叫做多型。

怎麼樣,這個解釋是不是非常的簡單粗暴~

總結下來就是用父類建立乙個子類物件。

講完概念,就要將一些細節。有乙個特別需要注意的點,就是這個物件的訪問許可權如何。話不多說,上**

//首先寫乙個main方法,進行兩個類方法的測試

public

static

void

main

(string[

] args)

如上,p1和p2的輸出為:

這說明兩個物件確實各自輸出了本類的eat方法。那麼再看下面的情況

我用student物件呼叫它的study方法缺發生錯誤,大家一定想知道為什麼。下面來解釋原因:

大家都知道new 乙個新物件的語法,類名 + 變數名 = new + 類名

那麼在多型的情況下,系統在編譯的時候看的是左邊的i類名,也就是父類。這樣以來大家就明白為什麼會出現上圖的錯誤了,原來父類也就是person類中並沒有study方法,因此系統會報錯。

接下來再進行乙個測試

public

class

student

extends

person

//特有方法study

public

void

study()

}

我把學生類中重寫的eat方法給注掉,再次在main方法中輸出p2.eat後結果為:

所以得出乙個結論:編譯的時候系統會載入左邊類的方法,但是建立物件執行的時候,優先看的是左邊的子類中是否有重寫的方法,如果有就呼叫重寫後的方法,如果沒有則返回父類中呼叫原本的方法。

當然,看完後可能大家還是不太理解。為了方便大家自己動手,以下為我新增的子類teacher,大家可以複製貼上方便自行驗證。

class

teacher

extends

person

//特有方法teach

public

void

teach()

}

ps:每天堅持擼**,總有一天會禿

C 多型的一些理解

1.c 中的多型,簡單來說是用基類的指標指向子類的物件,然後用這個基類指標就可以呼叫子類物件的方法 這些方法在基類中有,且被宣告為虛函式 如果乙個方法沒有被宣告為虛函式,則呼叫哪個方法取決於指標的型別。2.這是自己寫的乙個例子 class a public virtual void say clas...

對Linux inode的一些理解

檔名 inode device block 一 inode是什麼?理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次...

對棧的一些理解

之前總結過一篇有關函式棧幀的部落格 函式棧幀以及呼叫約定相關的一些總結 但是感覺自己還是有一點知識點沒有弄懂,今天中午跟郭哥吃過飯一起 有關殼的問題的時候,順便把這個問題請教了一下郭哥,終於弄明白了,在此要特地感謝他,這裡把一些心得體會寫出來 先看一幅圖 選自ida權威指南 注意圖中是基於esp的棧...