设为首页 加入收藏

TOP

Objective-C实现多继承
2014-11-24 12:11:44 来源: 作者: 【 】 浏览:0
Tags:Objective-C 实现 继承

我们都知道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在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多继承。但是协议只能提供接口,而没有提供实现方式,如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法,而既需要多继承接口,又要多继承其实现,那么协议是无能为力了。多协议遵守比较简单,具体的实现方式这里就不讲了!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Objective-C定义私有方法 下一篇QT通过DOM 读写XML的一个小问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)
·Java并发编程中的线 (2025-12-25 20:25:38)
·C 语言 - cppreferen (2025-12-25 19:50:27)
·《C 语言入门教程》 (2025-12-25 19:50:23)