Object-C 学习笔记(二十二)--- 协议Protocol

来源:互联网 发布:阿里云事业部组织架构 编辑:程序博客网 时间:2024/06/10 15:00

协议:相当于其他面相对象语言中得抽象类(@optional)或者是接口(@required),弥补面相对象多继承.

于接口的区别:java  C# C++中的接口或抽象类可以通过子类实例化对象,进行向上转型,但是协议不能实例化对象.


////  Car.h//  protocolDemo////  Created by 5016 on 13-12-16.//  Copyright (c) 2013年 dradon. All rights reserved.//#import <Foundation/Foundation.h>/* *定义协议 *相当于其他面相对象语言中得抽象类(@optional)或者是接口(@required) */@protocol Car <NSObject>//需求:对于车来说不一定要上颜色@optional,但是必须能跑@required//默认为@required@required//相当于其他面相对象语言的接口,一定要实现(覆盖)-(void)run;//上路跑@optional//相当于其他面相对象语言的抽象类,可选实现(覆盖)-(void)color;//上颜色@end

////  Benz.h//  protocolDemo////  Created by 5016 on 13-12-16.//  Copyright (c) 2013年 dradon. All rights reserved.//#import <Foundation/Foundation.h>#import "Car.h"@interface Benz : NSObject<Car>@end

////  Benz.m//  protocolDemo////  Created by 5016 on 13-12-16.//  Copyright (c) 2013年 dradon. All rights reserved.//#import "Benz.h"@implementation Benz-(void)run//上路跑{    NSLog(@"奔驰车正在路上跑");}-(void)color//上颜色{    NSLog(@"奔驰车上了黑颜色");}@end

////  main.m//  protocolDemo////  Created by 5016 on 13-12-16.//  Copyright (c) 2013年 dradon. All rights reserved.//#import <Foundation/Foundation.h>#import "Benz.h"int main(int argc, const char * argv[]){    @autoreleasepool {        Benz *benz = [[Benz alloc] init];        [benz run];                //判断是否能响应这个方法        if ([benz respondsToSelector:@selector(color)]) {            [benz color];        }                if([benz conformsToProtocol:@protocol(Car)]){            NSLog(@"响应这个协议(实现这个接口)");        }    }    return 0;}












0 0
原创粉丝点击