//
// 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的更多相关文章

  1. Objective-C 协议(protocol)

    协议(protocol)是Objective-c中一个非常重要的语言特性,从概念上讲,非常类似于JAVA中接口. 一个协议其实就是一系列有关联的方法的集合(为方便后面叙述,我们把这个协议命名为myPr ...

  2. Objective中的协议(Protocol)

    Objective中的协议(Protocol) 作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法 ...

  3. Linux 小知识翻译 - 「协议(protocol)」

    对于理解服务器和网络来说,「协议」是不可缺少的概念. 「协议(protocol)」有「规则,规定」的意思. 实际上「协议」的函数很广,在通信领域,「协议」规定了「在通信时,什么样的情况下,以什么样的顺 ...

  4. Google Chrome 自定义协议(PROTOCOL)问题的处理

    最近在使用谷歌浏览器的时候遇到了自定义协议(PROTOCOL)的问题,比较折腾,特此记录,希望我浪费生命换来的结果能够帮助读到此文的朋友少浪费一点宝贵的时间! 由于某些原因,电脑里一直没有安装阿里旺旺 ...

  5. 协议(Protocol)

    协议(Protocol)的基本概念 协议的声明看起来比较类似于Java中一个类的接口,但是和接口不同的是:协议没有父类也不能定义实例变量. 协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法 ...

  6. 协议(Protocol)---实例

    协议:声明一些必须实现的方法和选择实现的方法,用来声明一些方法,即一个Protocol是由一系列的方法声明组成的. 建立协议文件步骤:将鼠标放到文件列表处,利用快捷键 command +N 健,得到如 ...

  7. Swift协议(Protocol)

    协议是为方法.属性等定义一套规范,没有具体的实现. 协议能够被类.结构体等具体实现(或遵守). protocol SomeProtocol { // protocoldefinition goes h ...

  8. Objective-C /iphone开发基础:协议(protocol)

    protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能.Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充 ...

  9. [置顶] Objective-C ,/,ios,/iphone开发基础:协议(protocol)

    protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能.Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充 ...

  10. Swift - 协议(protocol)

    1,Swift中协议类似于别的语言里的接口,协议里只做方法的声明,包括方法名.返回值.参数等信息,而没有具体的方法实现. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

随机推荐

  1. C语言常量

    Constant包括4种类型: 整型 浮点型 枚举 字符型 #include <stddef.h> #include <uchar.h> int main() { /* Int ...

  2. yield让代码更加简洁

    不能传入out或ref public IEnumerable<Shop> GetShop() { ; i < ; i++) { yield return new Shop { ID ...

  3. react native 报错日常 if (_total > 0) { ~~~~~~ ^ ~ 1 error generated.

    node_modules/react-native/React/Base/RCTJavaScriptLoader.mm::: error: ordered comparison between poi ...

  4. UltraEdit(UE)window破解方法

      安装UltraEdit(一路下一步,无难点)成功后,打开软件弹出如下使用模式提示信息.   关掉UltraEdit软件,同时  断本机网络.重新打开UltraEdit软件:   点击[输入许可证密 ...

  5. log4net 局部代码 看不懂....

    public interface ILogger {} public interface ILoggerWrapper { ILogger Logger {get;} } public interfa ...

  6. mt_rand()和rand()两者的区别

    在随机读取中使用了mt_rand(),而不适用rand(),他们两者的区别: mt_rand()是更好地随机数生成器,因为它跟rand()相比播下了一个更好地随机数种子:而且性能上比rand()快4倍 ...

  7. 国密SSL证书免费试用申请指南

    沃通提供国密SSL证书免费申请试用服务,一次申请可同时签发SM2/RSA双算法证书,试用周期1个月,用于测试国密SM2 SSL证书的运行效果和SM2/RSA双证书部署效果. 试用产品:SM2/RSA双 ...

  8. 获取webconfig配置文件内容

    string ServerUrl= ConfigurationManager.AppSettings["ServerUrl"].ToString(); web.config中的配置 ...

  9. vue 打印 页面特定部分转pdf

    https://www.jb51.net/article/147040.htm https://www.jianshu.com/p/dd120b65446a  //转pdf

  10. git学习(1)

    一.git fetch 和git pull 的差别 1.git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令: git fetch orgin master //将远程仓库的 ...