歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Objective-C實現多繼承

Objective-C實現多繼承

日期:2017/3/1 10:19:25   编辑:Linux編程

我們都知道Objective-C不能像C++一樣支持多繼承,但是在Objective-C的使用經常會碰到需要使用多繼承的情況。例如,ClassA中有methodA,ClassB中methodB,而現在需要使用這兩個類中的方法。如何按照C++的編程思路,毫無疑問采用多繼承就搞定了,在Objective-C就需要動動腦子了。

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

現在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];


}

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

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

Copyright © Linux教程網 All Rights Reserved