iOS开发:oc中实现多继承
2016-05-25 21:27
363 查看
OC无法完全像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];
}
方法二:
上面是采用组合的方式实现了多继承的功能,解决了OC不能多继承的语法。那么还有其他的方式来实现多继承吗?
虽然OC在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多继承。但是协议只能提供接口,而没有提供实现方式,如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法,而既需要多继承接口,又要多继承其实现,那么协议是无能为力了。多协议遵守比较简单,具体的实现方式这里就不讲了
方法三:给NSObject添加category
因为NSObject是所有类的父类,给NSObject添加类别就相当于给所有的类添加了这些方法,所有的类都可以使用这些方法。
方法一:采用组合的模式来代替继承模式。
实现多继承的代码:
举例现在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在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多继承。但是协议只能提供接口,而没有提供实现方式,如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法,而既需要多继承接口,又要多继承其实现,那么协议是无能为力了。多协议遵守比较简单,具体的实现方式这里就不讲了
#import <Foundation/Foundation.h> @protocol Add <NSObject> - (int)addA:(int)a b:(int)b; @end #import <Foundation/Foundation.h> @protocol Sub <NSObject> - (int)subA:(int)a b:(int)b; @end #import <Foundation/Foundation.h> @protocol Mul <NSObject> - (int)mulA:(int)a b:(int)b; @end ==================================================以上是三个协议 下面是新建一个继承与NSObject的计算类Calculator #import <Foundation/Foundation.h> #import "Add.h" #import "Sub.h" #import "Mul.h" //遵守多个协议 //类似于c++的多继承 @interface Calculator : NSObject <Add,Sub,Mul> @end #import "Calculator.h" @implementation Calculator - (int)addA:(int)a b:(int)b { return a+b; } - (int)subA:(int)a b:(int)b { return a-b; } - (int)mulA:(int)a b:(int)b { return a*b; } @end ========================================== #import <Foundation/Foundation.h> #import "Calculator.h" /* 现在有多个类,一个是加法器类(会算加法) 第二个类是减法器类(减法功能)第三个乘法器类(乘法) 实现一个类分别可以进行 + - * c++可以用多继承实现 但是OC没有多继承 但是OC可以通过协议来实现 */ int main(int argc, const char * argv[]) { @autoreleasepool { Calculator *calc = [[Calculator alloc] init]; NSLog(@"%d",[calc addA:1 b:1]);//2 NSLog(@"%d",[calc subA:1 b:1]);//0 NSLog(@"%d",[calc mulA:1 b:1]);//1 } return 0; }
方法三:给NSObject添加category
因为NSObject是所有类的父类,给NSObject添加类别就相当于给所有的类添加了这些方法,所有的类都可以使用这些方法。
相关文章推荐
- iOS开发之路--微博“更多”页面
- iOS开发之路--微博骨架搭建
- iOS开发使用JSON解析网络数据
- IOS开发代码分享之获取启动画面图片的string
- iOS开发实现音频播放功能
- iOS开发之视图切换
- iOS开发使用XML解析网络数据
- IOS开发实现录音功能
- iOS开发之UIScrollView详解
- IOS开发之路--C语言数组和字符串
- iOS开发之触摸事件
- IOS开发代码分享之用nstimer实现倒计时功能
- iOS开发使用GDataXML框架解析网络数据
- iOS开发之UITableView详解
- IOS开发代码分享之设置UISearchBar的背景颜色
- ios推送证书
- iOS和tvOS游戏按需加载资源简介
- ios开发之环境搭建-01
- 在开发iOS程序时对日期处理的总结