繼承與category的區別

2021-06-27 01:54:43 字數 1601 閱讀 5041

在objective-c中,給乙個類擴充套件乙個其它方法,有兩種實現方式:類別和繼承。

1.繼承inherit

這個是物件導向語言都有的乙個特性,子類會繼承父類的方法和屬性。

對於以下情況,無法使用類別,必須使用繼承。

1)新擴充套件的方法與原方法同名,但是還需要使用父類的實現。因為使用類別,會覆蓋原類的實現,無法訪問到原來的方法。

2)擴充套件類的屬性,這個類別無法做到。

示例**:

?

1

2

3

4

5

6

7

8

// 

viewcontrollerex.h

@inte***ceviewcontrollerex : uiviewcontroller

//自己需要新增的方法

@end

// viewcontrollerex.m

@implementationviewcontrollerex

// 方法的實現

@end

2.類別category

這是objective-c語言的乙個特性,可以在不改變類名和原來類的實現的前提下,實現對類的方法擴充套件。

以下兩種方式最後使用類別。

1)針對系統提供的一些類,例如:nsstring,nsarray,nsnumber等類,系統本身不提倡使用繼承去擴充套件方法,因為這些類內部實現對繼承有所限制,所以最後使用類別來進行方法擴充套件。

2)類別支援開發人員針對自己構建的類,把相關的方法分組到多個單獨的檔案中,對於大型而複雜的類,這有助於提高可維護性,並簡化單個原始檔的管理。

示例**:

?

1

2

3

4

5

6

7

8

9

// 這裡有乙個約定俗成的規定,類別檔案命名時,是原類名+擴充套件標識名

// 

nsstring+ex.h

@inte***censstring(ex)

// 擴充套件的類回別方法

@end

// 

nsstring+ex.m

@implementationnsstring(ex)

// 方法的實現

@end

虛擬繼承與多繼承的區別

虛擬繼承應該還說就是建立在多繼承的基礎上 也就是說無多繼承就無所謂的虛擬繼承 而虛擬繼承的存在也就是為了省下些多重繼承的效能 這什麼這樣說呢 因為邇使用多繼承時 如果最終類是通過多個類繼承的 而這些類都是由同乙個基類繼承時 對最終類的例項化就會重複執行 造成效能的浪費 比如class human c...

組合與繼承的區別

組合和繼承都允許在新的類中設定子物件,只是組合是顯式的,繼承是隱式的。繼承關係 is a 關係 組合關係 has a 關係 例如 car表示汽車物件,vehicle表示交通工具物件,tire表示輪胎物件 如何選擇 兩大原則 不要單純地為了實現 的重用而使用繼承,除非兩個類是 is a 的關係,否則不...

繼承與模板的區別

體會 繼承是資料的複製 模版是 的複製。模板函式在編譯完成之後,會生成對應引數數型別的函式 繼承是對虛表 資料的複製,其中也涉及到使用虛函式繼承產生多型時,虛表函式的替換 templatevoid sort t arr,int nlength 測試 char arr sort arr,6 templ...