標籤:
物件導向語言三大特徵:封裝、繼承、多態。
封裝:一個類留給外部介面總是小於內部實現的方法。
繼承:自雷可以繼承父類的欄位、屬性、方法。
多態:面對同一訊息,不同類的對象做出不同的響應。
一、認識繼承
(1)生活角度
父類:動物 英雄 人
子類:狗 抗日英雄 中國人
父類 超類 基類
子類 子類 衍生類別
【繼承】也稱派生。繼承指的是子類繼承父類的欄位、屬性、方法。派生是指子類在父類基礎上可以添加自己特有的欄位、屬性、方法。【繼承】與【派生】是對同一種行為,不同側重點的描述。
【注】
(a)子類可以從父類繼承到父類所有的欄位、屬性、方法。父類在interface中聲明欄位、屬性、方法,子類全部可以使用。父類在impletation中聲明的欄位、屬性、方法,子類同樣可以繼承,但是無法使用。
(b)子類可以在父類的基礎上添加自己特有的欄位、屬性、方法。
【注】
1.oc中 所有的方法都是虛函數,都可以被子類重寫
2.重寫之後,子類對象調用的是子類中重寫之後的方法。
3.很多時候,我們並不需要將父類某些方法完全重寫,而在父類基礎開枝散葉。這個時候我們借用super關鍵字去調用的方法。
self與super
【問】為什麼我們不可以將對象開闢在棧中,只能建立在堆上?
因為oc是動態機制,所謂的動態機制,是指在程式編程階段是無法確定一個類的父類的,自然就不可以確定他的大小,沒辦法確定大小就沒有辦法再棧開闢空間,所以只能在運行階段,動態去對上為對象開闢空間。
二、繼承的作用
1.建立大量相似的類(oc中幾乎不用)
【例】在遊戲開發中,我們會建立一個怪物,殭屍,幽靈,怪物的行為:遊盪、攻擊、被攻擊、死亡。
2、繼承一個官方 的類或者繼承一個第三方的類。
【注】NSString\NSArray\NSDictionsry 不可以被繼承。
3、使用繼承去實現多態。
【多態】是不同對象面對同一個訊息做出不同的反應。
一、認識多態
(1)從生活角度
面對上課鈴響,上體育課和文化課的學生面對‘鈴響‘做出不同的舉動。
(2)從代碼角度
父類指標指向子類對象,通過父類指標調用方法時,父類指標指的對象不同,面對同一訊息的響應結果不同。
【注】以上多態,主要是C++實現多台的手段,在OC階段實現多態是通過協議。
【繼承】+【重寫】+【父類指標實現多態】
【類別】category
當我們在使用一個類的時候,我們經常會感歎:如果這個類再有一個什麼方法多好啊,通常不方便直接修改該類。
【注】
1、在類別中只能新增成員方法。類方法,但是不可以新增成員變數、屬性。
2、在類別中添加方法就如同添加到了原類中。
3、在類別定義成員方法也可以是原類的成員變數。
4、父類的類別添加的成員方法、類方法,子類也可以使用。
5、要想使用類別中添加的方法,需要匯入類別的標頭檔(原類+類別名)。
論“繼承與多態”的重要性