黑馬程序員——Objective-C程序設計(第4版)學習筆記之08-繼承——黑馬 IOS 技術博客

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------


一切從根類開始:

沒有父類的類,位於類層次結構的最頂層,稱爲根(Root)類。NSObject是層次結構的最頂端(也就是它上面沒有任何類),因此稱爲根類。

如果使用術語,可以將類稱爲子類和父類。同樣,也可以將類稱爲子類和超類。

需要注意的是,要在子類中直接使用實例變量,必須先在接口部分聲明。在實現部分聲明和合成(synthesize)的實例變量是私有的,子類中並不能夠直接訪問,需要明確定義或合成取值方法,才能訪問實例變量的值。


繼承的概念作用於整個繼承鏈。

一定要理解以下事實:類的每個實例都擁有自己的實例變量,即使這些實例變量是繼承來的。


找出正確的方法:

首先,檢查該對象所屬的類,以查看在該類中是否明確定義了一個具有指定名稱的方法。如果有,就使用這個方法。如果沒有定義,就檢查它的父類。如果父類中有定義,就使用這個方法,否者,繼續找尋。知道找到根類也沒有發現任何方法。


通過繼承來擴展:添加新方法

繼承通常用於擴展一個類。


@class指令:

@class XYPoint;

#import "XYPoint.h"

使用@class指令提高了效率,因爲編譯器不需要引入和處理整個XYPoint.h文件(雖然它很小),只需要知道XYPoint是一個類名。如果需要引用XYPoint類的方法(在實現部分中),@class指令是不夠的,因爲編譯器需要更多的消息。

說的通俗點:只引用了類就用@class不然就用#import。

在默認情況下,合成的設值方法只是簡單地複製對象指針,而不是對象本身。你可以合成另一種設值方法,而不是製作對象的副本。


覆寫方法:

不能通過繼承刪除或減少方法。但可以利用覆寫來更改繼承方法的定義。

新方法必須具有相同的返回類型,並且參數的數目與覆寫的方法相同。

如果在不同的類中有名稱相同的方法,則根據作爲消息的接收者的類選擇正確的方法。


爲什麼要創建子類?有如下3個理由:

1)希望繼承一個類的方法,也許加入一些新的方法和或實例變量。

2)希望創建一個類的特別的版本。

3)希望通過覆寫一個或多個方法來改變類的默認行爲。


抽象類:

有時,創建類只是爲了更容易創建子類。因此,這些類名爲抽象(abstract)類,或等價地稱爲抽象超類(abstract superclasses)。在該類中定義方法和實例變量,但不期望任何人從該類創建實例。


發佈了0 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章