黑马程序员-OC语言-多态、代理
2015-12-30 19:39
525 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
开场白:多态是C语言的概念,代理是OC的概念,多态作为面向对象三大特性之一,重要性可见一斑,代理也更不可小视。
为什么要把它们放到一起来说?因为我对它们在概念性和功能性上有点混淆。今天就把要它们说清楚了,解决这场纠纷!
多态:不同的对象以不同的方式响应相同名称方法的能力称为多态 (也就是一个方法有多种状态,多种状态体现在子类对父类方法重写中)
话说:有一个消防员(Fireman)类、一个医生(Doctor)类,都继承自人类(Person)
消防员类:save方法(灭火)
医生类:save方法(输液)
人类:在这代表上帝
编译时,编译器会检查指针p1、p2的类型(Person)有没有这个方法,如果有,不报错;如果没有,报错。(强制类型转换会避过这一步)
运行时,会检查p1\p2指针的真正类型(Doctor、Fireman)有没有这个方法,如果有,不报错;如果没有,报错。
所有的强制类型转换都是临时的。
多态存在的意义:
简化了编程接口。类和类之间可以重用一些习惯性的命名。这样,编程接口就是一些抽象的行为的集合。
代码扩展性和复用性更好。
方法多样性
高聚合性和低耦合性
代理:让别人代替你去做事,代替你完成任务的对象,就是你的代理。
协议:
人类:
枪类:(遵守LaunchProtocol协议)
main函数
代理存在的意义:
1.拓展了功能和方法
2.高聚合性和低耦合性
自己的一些思考:代理没有继承关系,通常A知道什么是什么时候做事,但不知道怎么做,而B知道怎么做却不知道什么时候做,让AB合作,在正确的时间做正确的事。
多态是多个子类相应一个方法,主要作用是:简化编程接口,提高代码扩展性。
都实现高聚合低耦合。
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
开场白:多态是C语言的概念,代理是OC的概念,多态作为面向对象三大特性之一,重要性可见一斑,代理也更不可小视。
为什么要把它们放到一起来说?因为我对它们在概念性和功能性上有点混淆。今天就把要它们说清楚了,解决这场纠纷!
多态:不同的对象以不同的方式响应相同名称方法的能力称为多态 (也就是一个方法有多种状态,多种状态体现在子类对父类方法重写中)
话说:有一个消防员(Fireman)类、一个医生(Doctor)类,都继承自人类(Person)
消防员类:save方法(灭火)
医生类:save方法(输液)
人类:在这代表上帝
@interface Person:NSObject @end @implementation Person @end
@interface Fireman:Perosn @end @implementation Fireman -(void) save; @end
@interface Doctor:Person @end @implementation Doctor -(void) save; @end
Person *p1=[Doctor new];//Doctor是Person的子类 person *p2=[Fireman new];//Fireman是Person的子类 [(Doctor *)p1 save]; [(Fireman *)p2 save];
编译时,编译器会检查指针p1、p2的类型(Person)有没有这个方法,如果有,不报错;如果没有,报错。(强制类型转换会避过这一步)
运行时,会检查p1\p2指针的真正类型(Doctor、Fireman)有没有这个方法,如果有,不报错;如果没有,报错。
所有的强制类型转换都是临时的。
多态存在的意义:
简化了编程接口。类和类之间可以重用一些习惯性的命名。这样,编程接口就是一些抽象的行为的集合。
代码扩展性和复用性更好。
方法多样性
高聚合性和低耦合性
代理:让别人代替你去做事,代替你完成任务的对象,就是你的代理。
协议:
@protocol LaunchProtocol <NSObject> -(void) shoot; @end
人类:
@interface Person : NSObject @property(nonatomic,strong) id<LaunchProtocol> delegate; -(void) launch; @end @implementation Person { NSLog(@"扣动扳机~~~"); if (self.delegate!=nil) { [self.delegate shoot]; } } @end
枪类:(遵守LaunchProtocol协议)
@interface cf : NSObject<LaunchProtocol> @end @implementation Gun -(void) shoot { NSLog(@"biu biu 11biu"); } @end
main函数
Person *p=[Person new]; Gun *gun=[Gun new]; p.delegate=gun; [p launch];//person类只有扣动扳机的方法,没有发射的方法,发射的方法就找到了枪去做。
代理存在的意义:
1.拓展了功能和方法
2.高聚合性和低耦合性
自己的一些思考:代理没有继承关系,通常A知道什么是什么时候做事,但不知道怎么做,而B知道怎么做却不知道什么时候做,让AB合作,在正确的时间做正确的事。
多态是多个子类相应一个方法,主要作用是:简化编程接口,提高代码扩展性。
都实现高聚合低耦合。
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
相关文章推荐
- 依附品牌做代理 把握创业新机遇
- 代理区独立模式的说明
- C#与.net高级编程 C#的多态介绍
- C#中面向对象编程机制之多态学习笔记
- C#中的多态深入理解
- C#中多态、重载、重写区别分析
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- http代理相关知识分析
- 为MySQL安装配置代理工具Kingshard的基本教程
- c#基础学习之多态
- JavaScript的事件代理和委托实例分析
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- asp代理采集的核心函数代码
- 从汇编看c++中多态的应用
- javascript 面向对象全新理练之继承与多态
- Java多态的使用注意事项
- nginx 1.0.0配ngx_cache_purge实现高效的反向代理
- C#使用虚拟方法实现多态
- 实例讲解PHP面向对象之多态
- C#中多态现象和多态的实现方法