OC实现多继承

分类: Objective-C 206人阅读 评论(0) 收藏 举报

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

原文链接: https://www.cnblogs.com/fengzhiwuyu/archive/2012/10/10/2719173.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    OC实现多继承

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/65373

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午11:48
下一篇 2023年2月9日 上午11:49

相关推荐