我們都知道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是否就真的拋棄多繼承的邏...