oc - 协议 protocol

@protocol myProtocol <NSObject> // 基协议

@required // 声明了必须要实现的,默认情况下都是

@required

- (void)walk;

- (void)speak;

- (void)think; // think在类实现中未实现会警告!!!

@optional

- (void)sing;

- (void)laugh;

@end

协议可以声明一大堆方法,但不能声明成员变量;

两个协议之间不能继承,但协议可以遵守另一个协议;

子类可以遵守父类遵守的协议;

NSObject<myProtocol,allProtocol> * stu = [[Student alloc]init];

等价于

Student *stu = [[Student alloc]init];// 任何类

[stu eat]; // 子类重写了,调用子类的

[stu run]; // 子类没重写,向上找找到父类的方法

student can eat

person can run

Program ended with exit code: 0

Student * stu  = [[Student alloc]init];

Student <myProtocol>  * student = stu;

NSObject<myProtocol> * student = stu;

id<myProtocol> student = stu;

若报错,就检验出stu没遵守协议

#import "Student.h"

@implementation Student

- (void)exam{

NSLog(@"student can exam.");

}

- (void)eat{

NSLog(@"student can eat");

}

@end

#import <Foundation/Foundation.h>

@protocol allProtocol <NSObject>

- (void)eat;

- (void)run;

@end

#import "Person.h"

@implementation Person

- (void)eat{

NSLog(@"person can eat");

}

- (void)run{

NSLog(@"person can run");

}

@end

时间: 2024-10-14 10:20:51

oc - 协议 protocol的相关文章

【OC基础】02-分类(Category)和协议(Protocol)

一.分类(Category) (1).分类的基础知识 分类是在不改变原有类内容的基础上,为类增加一些方法的方式. (2).分类的注意事项 1>分类只能增加方法,不能增加成员变量; 2>在分类方法的实现中可以访问原来类中的成员变量: 3>分类中可以重新实现原来类中的方法,但是这样会导致原来的方法无法在使用 4>在大规模应用中.通常把相应的功能写成分类,对原有的类进行扩充,一般分模块写,一个模块一个分类 二.分类的实现 我们可以再上一节Student类的基础上增加分类: CateStu

类目 (category),扩展(Extension)和协议(protocol) (转)

@类目-分类(category) 1.类目: 类目(也成类别:Category)是一种为现有类添加新方法的方式2.类目的局限性:1)类目无法向已有的类中添加实例变量: 2)如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优先级高,发生这种情况,则已有类的原始方法永无天日,最好的办法是将自己扩展的方法和原始方法区分开来. 3.类目的作用:?       将类的实现分散到多个不同的文件中–      将多个类目的声明放入同一个.h文件中–      将实现放入多个.m方法中?       使

Objective-C中的协议(Protocol)和类别(Category)

1.什么是协议? 2.协议与类别的声明和使用 1.什么是协议? 在Objective-C中,不支持多继承,即不允许一个类有多个父类,但是OC提供了类似的实现方法,也就是协议.协议有点类似于Java里的接口,不同点就是在协议里,可以提供可选的方法,不要求全部继承. 协议包括正式协议和非正式协议. 正式协议:其声明一个方法列表,协议的实现者需要实现声明的方法,可以使用@required和@optional关键字指定方法必须实现或可选实现,默认为必须实现.子类会继承其父类采用的协议,一个协议本身也可以

OC协议的简单理解

新建一个工程,工程里面有Person, dog,blackman三个类,person需要找个人来帮他盖房子. 分析:dog是动物,肯定不会造房子,blakman,或许可以建房子,那程序如何判断blackman,dog能否建房子?那我们就需要一个东西来限定/指定他们的属性,这就是协议咯,协议在我看来就是一个可以限定/指定一些对象属性的东西,所以现在我们现在新建一个名为delegate的类 @protocol onedelegate <NSObject> //创建一个协议 @required //

OC基础-protocol

protocol(协议)的声明看起来比较向java中得一个类的接口,但是不同点在于:protocol没有父类也不能定义实例变量. protocol是一种特殊的程序设计结构,用于声明专门被别的类实现的方法. 常见使用场合: 1.需要由别的类来实现的方法 2.声明未知类的接口 3.两个类之间的通信 protocol的基本特点: 协议可以被任何类实现的方法 协议本身不是类,他是定义了一个其他类可以实现的接口. 类别也可以采用协议(用得不多) protocol中得关键字: @required :表示必须

12-Objective-C特有语法:协议protocol

1.协议是用来干嘛的? 用来声明一堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守那个协议 2.协议的定义 @protocol 协议名称 <NSObject> // 方法声明列表.... @end 3.如何遵守协议 1> 类遵守协议 @interface 类名 : 父类名 <协议名称1, 协议名称2> ······ @end 2> 协议遵守协议 @protocol 协议名称 <其

IOS阶段学习第19天笔记(协议-Protocol)

IOS学习(OC语言)知识点整理 一.关于协议(Protocol)的介绍 1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者      之间通讯的一种方式 2)声明一个协议@protocol协议的名字<基协议> 一个协议可以遵守另一个协议:      基协议(这个协议就拥有了基协议中所有方法的声明) 3)协议中不能声明成员变量,只能有方法声明. 4)协议中声明方法,默认是required 表明方法是必须要实现的,否则会有系统警告,但不会报错 5)协议中@

协议Protocol

1.协议:是一组声明方法的集合,不能声明成员变量,作用类似于接口. 遵守此协议的类就相当于拥有了这个协议的所有方法的声明,如果父类遵守了某个协议,子类也遵守了这个协议. 遵守这个协议的类可以实现协议中的方法. 关键字: @required:声明必须遵守的方法 @optional:声明可选的方法 2.代理:实现协议的某个方法 3.委托:指定要实现协议方法的对象(代理),代理来实现对应的方法 总结: 委托方:1.定义协议:2.引用代理:3.发送消息 代理方:1.遵守协议:2.实现方法:3.设置自己为

协议protocol和代理delegate的使用

这里的协议是独立的,不再类里面,所以每个类的头文件都要引入#import "MarryProtoco.h"头文件.. 首先新建一个协议 Protocol:MarryProtoco 里面写代理人要执行的方法,或者可选方法 #import <Foundation/Foundation.h> @protocol MarryProtoco <NSObject> //代理人中必须要执行的 . //做饭 - (void)cook; //洗衣服 - (void)washClo