OC语法<3.3> OC中特有的语法:Protocol协议
2014-12-12 00:16
525 查看
Protocol协议:
1:协议其实很简单,协议就是规定,谁遵循了我的协议,谁就能够指向我,比如说,小明实现了好人协议,那么小明就是一个好人
2:协议本身只是提供方法的声明,并不实现方法,谁遵循了协议,谁就要实现协议中定义的方法(跟java中的抽象方法有点类似,都是一些共有的属性),说白了协议里面就是一堆方法的声明,等着类引用去实现
3:一个类可以同时遵循多个协议
4:协议本身也可以遵循其他协议(可以多个),NSObject是一个基础协议
5:父类遵循了那些协议,子类同样遵循那些协议
6:协议也可以再.m文件中临时加,但是只能自己用,当然也要实现当中的方法,这种情况一般都是不需要许多的类去遵循的协议,也就是一个类所特有的协议
7:协议跟分类有点相似,协议当中也不能够声明成员变量,实际开发当中,也是先写协议后写类的
一:创建一个Protocol
创建一个protocol协议跟category差不多, 也是在 Objective-C File 里面
二:实例应用
我们创建三个协议:流氓协议,Person协议,学生协议
流氓协议:
学生协议:
我们创建一个对象Person来实现流氓协议和Person协议,当然必须要实现协议里面所有的方法(@required 必须实现的方法,@optional可选实现的借口);
Person的.h
Person的.m:实现各个协议的方法
我们创建一个middleStudent 的类来继承 Person类,父类遵循了那些协议,子类同样遵循那些协议,只不过父类帮我们实现好了,我们拿过来用就行,当然middleStudent也可以创建自己私有的协议 ,如下
middleStudent 的.m文件
测试结果:
1:协议其实很简单,协议就是规定,谁遵循了我的协议,谁就能够指向我,比如说,小明实现了好人协议,那么小明就是一个好人
2:协议本身只是提供方法的声明,并不实现方法,谁遵循了协议,谁就要实现协议中定义的方法(跟java中的抽象方法有点类似,都是一些共有的属性),说白了协议里面就是一堆方法的声明,等着类引用去实现
3:一个类可以同时遵循多个协议
4:协议本身也可以遵循其他协议(可以多个),NSObject是一个基础协议
5:父类遵循了那些协议,子类同样遵循那些协议
6:协议也可以再.m文件中临时加,但是只能自己用,当然也要实现当中的方法,这种情况一般都是不需要许多的类去遵循的协议,也就是一个类所特有的协议
7:协议跟分类有点相似,协议当中也不能够声明成员变量,实际开发当中,也是先写协议后写类的
一:创建一个Protocol
创建一个protocol协议跟category差不多, 也是在 Objective-C File 里面
二:实例应用
我们创建三个协议:流氓协议,Person协议,学生协议
流氓协议:
#import <Foundation/Foundation.h> #import "StudentProtocol.h" //谁遵循了协议,谁就要实现协议中定义的方法,协议本身只提供方法的声明,并不实现方法 //协议本身也可以遵循其他协议,NSObject是一个基础协议 @protocol LiuMangProtocol <NSObject,StudentProtocol> //协议就是方法 @required //这个关键字代表下面的方法必须实现 -(void)eat; //吃 -(void)drink; //喝 @optional //这个方法代码可选实现 -(void)gamble; //赌 -(void)lie; //撒慌 @end
学生协议:
#import <Foundation/Foundation.h> @protocol StudentProtocol <NSObject> -(void)listener; -(void)write; @endstudent协议:
#import <Foundation/Foundation.h> @protocol StudentProtocol <NSObject> -(void)listener; -(void)write; @end
我们创建一个对象Person来实现流氓协议和Person协议,当然必须要实现协议里面所有的方法(@required 必须实现的方法,@optional可选实现的借口);
Person的.h
#import <Foundation/Foundation.h> #import "LiuMangProtocol.h" #import "PersonProtocol.h" #import "Car.h" #import "CarProtocol.h" //一个类可以同时遵循多个协议 //遵守哪个协议就要写在下面的< >中 @interface Person : NSObject<LiuMangProtocol,PersonProtocol> //让Car遵循CarProtocol协议 @property(nonatomic,strong)Car<CarProtocol> *car; //下面这种也行 @property(nonatomic,strong)id <CarProtocol> obj; @end
Person的.m:实现各个协议的方法
#import "Person.h" @implementation Person -(void)eat { NSLog(@"流氓吃鸡蛋不吐葡萄皮"); } -(void)drink { NSLog(@"流氓喝酒不给钱"); } -(void)gamble { NSLog(@"流氓赌博老输钱"); } -(void)lie { NSLog(@"流氓撒谎如放屁"); } -(void)walk { NSLog(@"正常人走路"); } -(void)listener { NSLog(@"学生听课"); } -(void)write { NSLog(@"学生写字"); } @end
我们创建一个middleStudent 的类来继承 Person类,父类遵循了那些协议,子类同样遵循那些协议,只不过父类帮我们实现好了,我们拿过来用就行,当然middleStudent也可以创建自己私有的协议 ,如下
middleStudent 的.m文件
#import "Person.h" //一个类的私有协议,也就是不需要许多类去遵守的协议,一个类特有的协议,我们可以把它直接再这个类的.h文件中直接声明出来,如下 @protocol middleStudentProtocol <NSObject> -(void)sleep; @end //父类遵循了那些协议,子类同样遵循了那些协议 @interface middleStudent : Person<middleStudentProtocol> @endmiddleStudent 的.h文件,如果重写父类飞方法,那么会覆盖掉父类的方法
#import "middleStudent.h" @implementation middleStudent -(void)listener { NSLog(@"重写父类方法的学生听课"); } -(void)sleep { NSLog(@"中学生特有的协议,睡觉"); } @endmain函数
#import <Foundation/Foundation.h> #import "Person.h" #import "middleStudent.h" int main(int argc, const char * argv[]) { @autoreleasepool { //创建一个person Person *p = [[Person alloc]init]; [p eat]; [p drink]; [p walk]; //创建一个中学生 middleStudent *mid = [[middleStudent alloc]init]; [mid eat]; [mid listener]; //协议还有一种简便的书写方式,便于查看 //遵循协议的变量声明 //要求你创建的Person对象必须是遵循了personProtocol //如果Person中没有实现PersonProtocol那么编译就会报错 Person<PersonProtocol> *p2 = [[Person alloc]init]; //下面这种方式也行,id,万能指针类型,能够存储任何的对象类型 id<PersonProtocol> obj = [[Person alloc]init]; } return 0; }
测试结果:
相关文章推荐
- OC语法<3.1> OC中特有的语法:Category分类
- OC语法<3.2> OC中特有的语法:Block数据类型
- OC基础语法<1.3> 入门面向对象语法-self、new、 @property和synthesize
- Client <—> Server Communication message protocol design(客户端与服务器信息协议)
- Swift 基础语法 <与 OC作对比>
- OC语法<4.5> Foundation框架中-集合的内存管理和集合之间的相互转换
- OC_语法入门_day6_ARC(循环引用)/block代码块(闭包)/protocol协议(接口)/代理模式
- OC面向对象语法<一>
- OC语法<4.2>:Foundation框架中的集合类-NSArray
- OC面向对象语法<二>
- OC语法<4.7> Foundation框架中的-日期操作
- OC面向对象语法<三>
- OC面向对象语法<四>
- OC语法<4.3> Foundation框架中的集合类-NSDictionary
- 【OC语法】Protocol协议的介绍
- OC特有语法<二>
- OC语法<4.8> Foundation框架中的-常用结构体和基本数据类型包装类
- OC语法<2.2>内存管理:手动内存管理2
- OC语法10——@protocol协议,
- OC基础语法<1.1> 入门面向对象语法-OC类、点语法