object c的協議,正式協議幾乎等同於java的介面
阿新 • • 發佈:2019-01-25
// // 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