Objective C實現多繼承

2021-07-15 02:27:18 字數 1142 閱讀 9249

我們都知道objective-c不能像c++一樣支援多繼承,但是在objective-c的使用經常會碰到需要使用多繼承的情況。例如,classa中有methoda,classb中methodb,而現在需要使用這兩個類中的方法。如何按照c++的程式設計思路,毫無疑問採用多繼承就搞定了,在objective-c就需要動動腦子了。

其實我們在學習設計模式的時候知道,多繼承的效率不高,而且採用組合的模式可以完全代替繼承模式。那麼,這種思路完全可以用在objective-c中實現多繼承(或許objective-c拋棄多繼承,就是強迫我們使用更高效的組合設計模式吧!)。下面用實際的**來表示組合如何來代替多繼承。

現在classc需要繼承classa中methoda、classb中methodb,具體的**實現為:

//定義classa以及其methoda

@inte***ce classa : nsobject

-(void)methoda;

@end

//定義classb以及其methodb

@inte***ce classb : nsobject

-(void)methodb;

@end

//定義classc以及其需要的methoda,methodb

@inte***ce classc : nsobject

-(id)initwitha:(classa *)a b:(classb *)b;

-(void)methoda;

-(void)methodb;

@end

//注意在classc的實現

@implementation  classc

-(id)initwitha:(classa *)a b:(classb *)b

-(void)methoda

-(void)methodb

上面是採用組合的方式實現了多繼承的功能,解決了objective-c不能多繼承的語法。那麼還有其他的方式來實現多繼承嗎?

雖然objective-c在語法上禁止類使用多繼承,但是在協議的遵守上卻允許使用多繼承。所以可以用協議來實現多繼承。但是協議只能提供介面,而沒有提供實現方式,如果只是想多繼承基類的介面,那麼遵守多協議無疑是最好的方法,而既需要多繼承介面,又要多繼承其實現,那麼協議是無能為力了。多協議遵守比較簡單,具體的實現方式這裡就不講了!

iOS開發筆記 Objective C實現多繼承

我們都知道objective c不能像c 一樣支援多繼承,但是在oc的使用經常會碰到需要使用多繼承的情況。例如,classa中有methoda,classb中methodb,而現在需要使用這兩個類中的方法。如何按照c 的程式設計思路,毫無疑問採用多繼承就搞定了,在oc就需要動動腦子了。其實我們在學習...

iOS開發筆記 Objective C實現多繼承

我們都知道objective c不能像c 一樣支援多繼承,但是在oc的使用經常會碰到需要使用多繼承的情況。例如,classa中有methoda,classb中methodb,而現在需要使用這兩個類中的方法。如何按照c 的程式設計思路,毫無疑問採用多繼承就搞定了,在oc就需要動動腦子了。其實我們在學習...

OC的多繼承實現

我們知道object c是在c語言的基礎上新增了物件導向功能,相比於同樣是對c語言進行擴充套件的c object c更加簡單,也更容易上手,但凡事必有利弊,作為程式語言,邏輯複雜也代表著其功能強大,例如c 中支援的多繼承在我們object c是不被支援的,那麼object c是否就真的拋棄多繼承的邏...