object c的协议,正式协议几乎等同于java的接口


//
//  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






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值