1. 程式人生 > >object c的協議,正式協議幾乎等同於java的介面

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