//
// main.m
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Police.h"
#import "Thief.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//oc的协议,正式的协议就是java中的接口
//创建object -c file,file type 为protocol,
//创建后,只有h文件,没有m文件,只是申明
//尖尖括号括起来的也是协议<NSObject>,代表父协议
//遵守协议,首先要在Person.h文件中引入#import "PersonProtocol.h"
//然后是在@interface Person : NSObject <PersonProtocol>
//和java 最大的不同是,这个协议可以实现或者不实现,可以通过@required来决定必须实现,@optional表示可以选择实现或者不实现,这个是和java 不同的
//@required
//-(void)eat;
//@optional
//-(void)work;
//-(void)play;
Person *person = [[Person alloc] init];
[person eat];
//继承person来创建一个police
//创建一个警察的协议policeProtocol,里面有一个catchThief
//然后创建小偷类,小偷的协议
Police *police = [[Police alloc] init];
[police catchThief];
Thief *thief = [[Thief alloc]init];
[thief steal];
//可以让一个类去遵守多个协议,这个和java 是一样的
}
return 0;
}
//
// PersonProtocol.h
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
//创建object -c file,file type 为protocol,
//创建后,只有h文件,没有m文件,只是申明
//尖尖括号括起来的也是协议<NSObject>,代表父协议
@protocol PersonProtocol <NSObject>
//默认的前面不加任何修饰,默认的方法必须要实现,
//@required表示必须实现
//@optional表示可以选择实现或者不实现,这个是和java 不同的
@required
-(void)eat;
@optional
-(void)work;
-(void)play;
@end
//
// Person.h
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "PersonProtocol.h"
//遵守协议,首先要引入#import "PersonProtocol.h"
//然后是在@interface Person : NSObject <PersonProtocol>
@interface Person : NSObject <PersonProtocol>
@end
//
// Person.m
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Person.h"
@implementation Person
//实现协议中的方法:
-(void)eat{
NSLog(@"eat");
}
@end
//
// Police.h
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Person.h"
#import "PoliceProtocol.h"
@interface Police : Person <PoliceProtocol>
@end
//
// Police.m
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Police.h"
@implementation Police
-(void)eat{
NSLog(@"警察吃饭");
}
-(void)work{
NSLog(@"警察工作");
}
-(void)catchThief{
NSLog(@"警察抓小偷");
}
@end
//
// PoliceProtocol.h
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol PoliceProtocol <NSObject>
-(void)catchThief;
@end
//
// Thief.h
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Person.h"
#import "ThiefProtocol.h"
@interface Thief : Person <ThiefProtocol>
@end
//
// Thief.m
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import "Thief.h"
@implementation Thief
-(void)steal{
NSLog(@"小偷偷东西");
}
@end
//
// ThiefProtocol.h
// ProtocoDemo
//
// Created by 千雅爸爸 on 16/10/7.
// Copyright © 2016年 kodulf. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol ThiefProtocol <NSObject>
-(void)steal;
@end