iOS 繼承 分類和類擴充套件

2021-08-20 12:35:53 字數 1663 閱讀 5545

繼承是指乙個新類擁有被繼承類(父類)的全部屬性和方法。例如,只有繼承nsobject,才有建立物件的能力。nsobject是大部分類的基類(根類,root class)。

當a類繼承b類,a類就擁有b類中所有成員變數(屬性)和方法。這也是繼承的主要目的。

使用場景:當我們可以說通b是乙個a時,就可以使用b繼承a類。

繼承的好處:**重用;繼承的缺點:父類的改變影響所有的子類。子類與父類耦合度很高。當子類中需要有自己獨特的行為,不想使用父類的方法,可以把父類的方法覆蓋掉:直接在子類中用一樣的名字寫個方法。不用在.h中寫,因為父類已經宣告過了,直接在.m中重寫。

如果重寫了父類的方法,但還想使用父類的功能。則使用super。用來呼叫父類的方法。可以認為,super就是指父類。

在繼承體系中方法呼叫的順序:1)在自己類中找;2)如果沒有就去父類中找;3)如果父類中沒有,就去父類的父類中找……直到找到基類。

oc中只有實現沒有宣告的方法,是私有方法,不能在外面直接訪問。但是它不是絕對私有。

繼承的注意點:oc中,類方法也是可以繼承的(通過子類的類名呼叫父類的類方法);類方法也是可以重寫的;類方法可以和物件方法重名(+表示類方法,-表示物件方法);子類中不能定義與父類中同名的成員變數。

oc是單繼承:乙個類只能繼承乙個直接父類;

oc是多層繼承:b類繼承a類,c類可以繼承b類……分類(類別)作用:擴充套件已有類的功能。

1)為原來的類增加方法;

2)在方法內部可以訪問原有類的成員變數(但這些成員變數一定要定義在標頭檔案中)

操作方法:

1)為原有的類建立乙個分類;2)在分類中增加新的方法的宣告和實現

在左側欄目資料夾處右鍵-new file-objective-c file-file type選category-class選你還要擴充套件的那個類-file填分類名稱(不是檔名稱)。

注意點:

1、分類中不能擴充套件原有類的成員變數!

2、如果在分類用@property:在分類中只能生成getter setter方法的宣告,不能生成方法的實現和成員變數。

4、你不能在分類中定義與原有類同名方法,不同的分類之間也不可以有同名的方法。如果你在分類中增加了乙個與原有類同名的方法,那麼分類中的方法會覆蓋原有類的方法。

5、如果多個分類中有相同的方法,執行最後編譯的方法。

6、記得要#import 分類。

在.m檔案中為類增加私有的成員變數(屬性)和方法。

在左側欄目資料夾處右鍵-new file-objective-c file-file type選extension-class選你還要擴充套件的那個類-file填分類名稱(不是檔名稱)。但通常直接在原類.m檔案裡寫:@inte***ce 原有類名()——這是乙個常用的方法,特別是在帶xib的控制器頁面,一些控制項我們通常用類擴充套件的方式,存在擴充套件裡面,這樣使得這些控制項成員是私有的,不會被外界干擾到。

與分類不一樣的是:類擴充套件的原類名稱後面的括號中沒有東西,也沒有.m檔案。

注意:類擴充套件得到的屬性和方法,都是私有的!在外界中無法直接使用,即無法直接get後者set到這些成員。但是可以在.h裡提供方法介面來改變這些私有屬性的情況。

分類和類擴充套件

分類 category 和 類擴充套件 extension 分類 category 1 給已經存在的類增加方法 可以不實現 不能增加成員變數 可以通過runtime來給分類新增屬性 2 分類可以訪問原來類中的成員變數 3 如果分類和原來的類出現同名的方法,優先呼叫分類中的方法 優先順序是 分類 最後...

分類,擴充套件和繼承的區別

1 分類和擴充套件的區別 1 分類 宣告的時候使用格式中括號必須要有分類名稱,建立完成後有兩個資料夾 person action.h person action.m檔案 inte ce 類名 分類名稱 方法宣告 end implementation 類名 分類名稱 方法實現 end 擴充套件 宣告的...

iOS 類擴充套件與分類的區別

類擴充套件 class extension也有人稱為匿名分類 能為某個類附加額外的屬性,成員變數,方法宣告 一般的類擴充套件寫到.m檔案中 一般的私有屬性寫到類擴充套件 inte ce mitchell 屬性 方法 end分類的小括號中必須有名字 inte ce 類名 分類名字 方法宣告 end i...