oc实现多继承
来源:互联网 发布:ios远程mac 编辑:程序博客网 时间:2024/06/10 23:56
我们都知道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在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多继承。但是协议只能提供接口,而没有提供实现方式,如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法,而既需要多继承接口,又要多继承其实现,那么协议是无能为力了。多协议遵守比较简单,具体的实现方式这里就不讲了
- oc实现多继承
- OC实现多继承
- OC学习:OC中实现多继承
- OC的多继承实现
- OC如何实现多继承
- OC中通过协议实现多继承
- iOS开发:oc中实现多继承
- oc 多继承
- OC中多继承?
- OC的多继承
- IOS征途之二 OC实现继承
- OC 继承
- OC-继承
- OC继承
- OC 继承
- OC 继承
- oc 继承
- OC 继承
- Failed to load JavaHL Library
- HDOJ 5483 Nux Walpurgis
- Codeforces27E Number With The Given Amount Of Divisors
- android 应用分配内存查看代码
- 第三方类库masonry(自动布局)的使用
- oc实现多继承
- 关于动画杂谈
- pyqt 批量ping一个网段 返回结果 的程序 (加了个界面 效果不理想)
- iOS开源项目学习——开源中国iOS客户端
- Android之Handler用法总结
- HDU 5469 Antonidas(树上的字符串匹配/搜索)
- js apply 与 call
- float数据在内存中的存储方法
- Mac下adb不能重启