1、单继承中父类可以声明成员变量和方法,子类继承父类之后,子类会继承父类所拥有的成员变量和成员方法,子类可以不写父类的方法。
2、协议中不可以声明变量,只能声明方法,然后由遵守协议的类实现方法
3、因为一个类中可以遵守多个协议,所以一个类中可以继承多个类的方法,但是实现则要在本类中实现。(协议多继承的本质)
ps:总的来说单继承可以继承父类的属性方法并且不用重写父类方法可以使用,但协议多继承只能继承方法,并且要重写协议方法,可以理解成tableView这种类型的控件。
接下来是实例:(参考链接https://my.oschina.net/u/2410306/blog/522755)
#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
}
return0;}
}