iOS開發筆記--Objective-C實現多繼承
阿新 • • 發佈:2018-12-26
我們都知道objective C不能像C++一樣支援多繼承,但是在OC的使用經常會碰到需要使用多繼承的情況。例如,ClassA中有methodA,ClassB中methodB,而現在需要使用這兩個類中的方法。如何按照C++的程式設計思路,毫無疑問採用多繼承就搞定了,在OC就需要動動腦子了。
其實我們在學習設計模式的時候知道,多繼承的效率不高,而且採用組合的模式可以完全代替繼承模式。那麼,這種思路完全可以用在OC中實現多繼承(或許OC拋棄多繼承,就是強迫我們使用更高效的組合設計模式吧!)。下面用實際的程式碼來表示組合如何來代替多繼承。
現在ClassC需要繼承ClassA中methodA、ClassB中methodB,具體的程式碼實現為:
//定義ClassA以及其methodA
@interface ClassA : NSObject {
}
-(void)methodA;
@end
//定義ClassB以及其methodB
@interface ClassB : NSObject {
}
-(void)methodB;
@end
//定義ClassC以及其需要的methodA,methodB
@interface ClassC : NSObject {
ClassA *a;
ClassB *b;
}
-(id)initWithA:(ClassA *)A b:(ClassB *)B;
-(void)methodA;
-(void )methodB;
@end
//注意在ClassC的實現
@implementation ClassC
-(id)initWithA:(ClassA *)A b:(ClassB *)B{
a=[[ClassA alloc] initWithClassA: A];//[A copy];
b=[[ClassB alloc] initWithClassB: B];//[B copy];
}
-(void)methodA{
[a methodA];
}
-(void)methodB{
[b methodB];
}
上面是採用組合的方式實現了多繼承的功能,解決了OC不能多繼承的語法。那麼還有其他的方式來實現多繼承嗎?
雖然OC在語法上禁止類使用多繼承,但是在協議的遵守上卻允許使用多繼承。所以可以用協議來實現多繼承。但是協議只能提供介面,而沒有提供實現方式,如果只是想多繼承基類的介面,那麼遵守多協議無疑是最好的方法,而既需要多繼承介面,又要多繼承其實現,那麼協議是無能為力了。多協議遵守比較簡單,具體的實現方式這裡就不講了!