------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)。在該類中定義方法和實例變量,但不期望任何人從該類創建實例。