oc64--协议2@protocol
- //
- // SportProtocol.h
- // day17
- //
- #import <Foundation/Foundation.h>
- @protocol SportProtocol <NSObject> //NSObject是默认的协议类,每个协议都要继承NSObject基协议。不写也可以。
- // 1.协议只能声明方法, 不能声明属性(跟分类一样)
- //{
- // int _age;
- //}
- // 方法声明列表
- // 2.注意: 如果没有使用任何关键字修饰协议中的方法, 那么该方法默认就是required的
- @required
- // 如果协议中的方法是@required的, 而遵守协议的类又没有实现该方法, 那么会报一个警告(不是报错)
- - (void)playFootball;
- @optional // 可选
- // 3.如果协议中的方法是@optional的, 而遵守协议的类又没有实现该方法, 那么不会报警告
- - (void)playBasketball;
- - (void)playBaseball;
- // 注意:@required和@optional仅仅使用程序员之间交流, 并不能严格的控制某一个遵守该协议的类必须要实现该方法, 因为即便不是实现也不会报错, 只会报一个警告,
- //废材一个废材一个。废材一个废材一个废材一个废材一个废材一个废材一个。
- @end
- //
- // CrazySportProtocol.h
- // day17
- #import <Foundation/Foundation.h>
- #import "SportProtocol.h"
- // 4.OC中的协议又可以遵守其它协议, 只要一个协议遵守了其它协议, 那么这个协议中就会自动包含其它协议的声明
- @protocol CrazySportProtocol <SportProtocol>
- // 跳舞
- - (void)jumping;
- @end
- //
- // StudyProtocol.h
- // day17
- #import <Foundation/Foundation.h>
- @protocol StudyProtocol <NSObject>
- - (void)study;
- @end
- //
- // Person.h
- // day17
- #import <Foundation/Foundation.h>
- #import "SportProtocol.h"
- #import "StudyProtocol.h"
- // 3.在OC中一个类可以遵守1个或多个协议
- // 注意: OC中的类只能有一个父类, 也就是说OC只有单继承(如果2个父类有同名的方法,那么子类就不知道调用哪个方法了。如果父类和爷爷类有同名的方法,子类调用会先去父类找,找不到再去爷爷类找。)
- @interface Person : NSObject<SportProtocol, StudyProtocol>
- @end
- //
- // Person.m
- // day17
- #import "Person.h"
- @implementation Person
- - (void)playFootball
- {
- NSLog(@"%s", __func__);
- }
- //- (void)playBasketball 如果是required,而没有实现,
- //{
- // NSLog(@"%s", __func__);
- //}
- //
- //- (void)playBaseball
- //{
- // NSLog(@"%s", __func__);
- //}
- - (void)study
- {
- NSLog(@"%s", __func__);
- }
- @end
- //
- // Sutdent.h
- // day17
- #import "Person.h"
- // 5.父类遵守了某个协议, 那么子类也会自动遵守这个协议(也有方法的声明)。
- @interface Sutdent : Person
- @end
- //
- // Sutdent.m
- // day17
- #import "Sutdent.h"
- @implementation Sutdent
- - (void)playBasketball
- {
- NSLog(@"%s", __func__);
- }
- @end
- //
- // main.m
- // protocol注意点
- //
- #import <Foundation/Foundation.h>
- #import "Person.h"
- #import "Sutdent.h"
- int main(int argc, const char * argv[]) {
- Person *p = [Person new];
- [p playBasketball];
- [p study];
- Sutdent *stu = [Sutdent new];
- [stu playBasketball];
- return ;
- }
oc64--协议2@protocol的更多相关文章
- Objective-C 协议(protocol)
协议(protocol)是Objective-c中一个非常重要的语言特性,从概念上讲,非常类似于JAVA中接口. 一个协议其实就是一系列有关联的方法的集合(为方便后面叙述,我们把这个协议命名为myPr ...
- Objective中的协议(Protocol)
Objective中的协议(Protocol) 作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法 ...
- Linux 小知识翻译 - 「协议(protocol)」
对于理解服务器和网络来说,「协议」是不可缺少的概念. 「协议(protocol)」有「规则,规定」的意思. 实际上「协议」的函数很广,在通信领域,「协议」规定了「在通信时,什么样的情况下,以什么样的顺 ...
- Google Chrome 自定义协议(PROTOCOL)问题的处理
最近在使用谷歌浏览器的时候遇到了自定义协议(PROTOCOL)的问题,比较折腾,特此记录,希望我浪费生命换来的结果能够帮助读到此文的朋友少浪费一点宝贵的时间! 由于某些原因,电脑里一直没有安装阿里旺旺 ...
- 协议(Protocol)
协议(Protocol)的基本概念 协议的声明看起来比较类似于Java中一个类的接口,但是和接口不同的是:协议没有父类也不能定义实例变量. 协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法 ...
- 协议(Protocol)---实例
协议:声明一些必须实现的方法和选择实现的方法,用来声明一些方法,即一个Protocol是由一系列的方法声明组成的. 建立协议文件步骤:将鼠标放到文件列表处,利用快捷键 command +N 健,得到如 ...
- Swift协议(Protocol)
协议是为方法.属性等定义一套规范,没有具体的实现. 协议能够被类.结构体等具体实现(或遵守). protocol SomeProtocol { // protocoldefinition goes h ...
- Objective-C /iphone开发基础:协议(protocol)
protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能.Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充 ...
- [置顶] Objective-C ,/,ios,/iphone开发基础:协议(protocol)
protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能.Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充 ...
- Swift - 协议(protocol)
1,Swift中协议类似于别的语言里的接口,协议里只做方法的声明,包括方法名.返回值.参数等信息,而没有具体的方法实现. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
随机推荐
- PHP配置步骤
背景: 作为web前端人员,必不可少的会接触到一些服务器端的脚本语言,比如PHP.因为最近在进行相关知识的总结,同时也回顾一下PHP基础知识.这次总结先从PHP的开始说起,即PHP的配置步骤. 什么是 ...
- BAT文件如何注释
1.BAT文件中如何注释: 1.:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符) 2.rem 注释内容(不能出现重定向符号和管道符号) 3.echo 注释内容(不能出现重定向符号和管道符 ...
- 170925_2 Python socket 创建UDP的服务器端和客户端
[python版本]3.6 UDP服务器端: from socket import * from time import ctime host = '' port = 21567 buf_size = ...
- ARM架构与体系学习(二)——3级流水线
ARM架构与体系学习(二)——3级流水线 标签: 存储嵌入式汇编c 2012-04-18 00:44 5414人阅读 评论(4) 收藏 举报 分类: ARM7(16) 版权声明:本文为博主原创文章 ...
- Centos6.6 安装基于系统认证的vsftp服务
一.介绍 vsftp是一款文件服务器软件,在文件共享,代码更新,文件备份中也是经常用到,以下是基本安装环境: 1)CentOS6.6 2)vsftpd-2.2.2 二.安装 $ yum install ...
- HDU_1848_博弈,sg函数
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- docker安装kong和kong-dashboard
1:docker安装遵循官方手册 2:安装kong 参考文档:https://getkong.org/install/docker/ 安装过程基本和文档一致,文档十分简单清晰. 但应注意,为了最新版k ...
- ubuntu下Apache2配置
Ubuntu下Apache2的CGI简单配置:http://blog.csdn.net/a623891391/article/details/47170355 Ubuntu Apache的安装和配置以 ...
- 【模板】非旋转Treap
Treap,也叫做树堆,是指有一个随机附加域满足堆的性质的二叉搜索树. 如果一棵二叉搜索树插入节点的顺序是随机的,那我们得到的二叉搜索树在大多数情况下是平衡的,期望高度是log(n). 但有些情况下我 ...
- 6.3.3 使用 shelve 模块操作二进制文件
Python标准库shelve也提供了二进制文件操作的功能,可以像字典赋值一样来写入二进制文件,也可以像字典一样读取二进制文件,有点类似于NoSQL数据库MongoDB. import shelve ...