021-多態 虛方法
一、多態
1、意在讓一個對象能夠表現出多種的類型、狀態;
(能讓父類表現出每個子類類型出來,就完美了,就不用寫類型轉換了)
2、實現多態的方法:
虛方法、抽象類、接口
注:實現多態,都是聲明父類,去指向子類
Person p = new Teacher();
二、虛方法實現
1、在父類的函數前面加上virtual關鍵字,標記爲虛方法。
2、在子類的每個函數前面加上override關鍵字,表示重寫父類的虛方法。
3、多態的優點:
我們將不同的子類對象都當作父類來看,這樣可以避免子類之間的差異。
寫出通用的代碼,做出通用的編程,以適應需求的不斷改變。
一定要用多態聲明父類,去執行子類對象。
三、抽象類
當父類不知道子類如何實現的時候,可以將父類提供的函數標記爲抽象函數。
抽象成員必須在抽象類中。
如果父類中的函數知道怎麼寫【有具體的實現】,則用虛方法實現多態,反之則用抽象類來實現多態。
抽象類的特點:
a.子類如果繼承了一個抽象的父類,那麼這個子類必須將抽象父類中的所有成員重寫。(除非這個子類也是抽象類)
b.抽象類中除了有抽象成員外,還可以有普通的成員,繼承那一套抽象類同樣可以使用(如單根性、繼承性等)。
c.子類重寫的父類抽象的函數,必須跟父類的抽象函數具有相同的方法簽名(相同的參數和相同的返回值)。
注:父類就是爲了封裝子類共有的成員
四、接口
1、概念:
a> 接口就是一種規範,協議(*),約定好遵守某種規範就可以寫通用的代碼。
b>定義了一組具有各種功能的代碼。(只是一種能力,沒有具體的實現,像抽象方法一樣,“光說不做”)
2、作用:
a> 接口解決了類的多繼承問題。
b> 接口解決了繼承以後體積龐大的問題。
五、虛方法和抽象類的區別
1、虛方法必須有實現,抽象方法必須沒有具體實現。
2、抽象方法必須在抽象類中聲明,虛方法可以出現在抽象類中。
3、抽象方法必須在子類中重寫,虛方法可以被重寫。