黑马程序员-OC多态
来源:互联网 发布:程序员眼镜 编辑:程序博客网 时间:2024/04/30 15:02
一、基本概念
多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。
在使用多态是,会进行动态检测,以调用真实的对象方法。
多态在代码中的体现即父类指针指向子类对象。
二、使用注意
代码分析:
Dog *d=[[Animal alloc] init]; 动物是一条狗?语义正确吗?
NSString *str=[Dog new]; 狗是一个字符串?正确吗?
Oc语言是一门弱语法的语言,编译的时候并不会报错,所以这就要求我们在实际的开发过程中一定要按照既定的规范来写代码,不要出现狗是一个字符串这样的问题。
多态的好处:
需要一个新的函数专门用来喂狗
Void feed(Dog *d)
{
[d eat];
}
如果这个时候也需要喂猫,那就应该重写新一个新的函数
Void feed(Cat *c)
{
[c eat];
}
而狗和猫实际上都继承自动物这个类,在这里就可以使用多态来简化代码了。
这里只需要把函数的参数写成是Animal *类型的,那么Dog和Cat类型的对象就都可以传入进来。
调用的时候直接改变参数就可以了。
多态的局限性:父类类型的指针变量不能直接调用子类特有的方法。
不建议的做法~
Animal *a=[[Dog alloc] init];
[a run];//在Animal类中没有run方法,这里调用了狗对象的方法。
解决方法:可以将a强制转换为Dog*类型的变量,如下:
Dog *d=(Dog *)a;//使用强制转换,这里a和d指向的是同一个狗对象
三、多态使用总结
(1)没有继承就没有多态
(2)代码的体现:父类类型的指针指向子类对象
(3)好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了。
(4)局限性:父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。
- 黑马程序员-OC多态
- 黑马程序员--OC多态
- 【黑马程序员】【OC语言】多态
- 黑马程序员-OC语言-多态
- 黑马程序员--OC--OC简介
- 黑马程序员--OC--封装、继承、多态
- 黑马程序员---oc 封装,继承,多态
- 黑马程序员 -- OC语言 封装 继承 多态
- 黑马程序员—OC基础--初探“多态”
- 黑马程序员-oc-多态
- 黑马程序员----oc基础笔记----多态
- 黑马程序员--OC--封装、继承、多态
- 黑马程序员-OC语言-多态、代理
- 黑马程序员 oc
- 黑马程序员--OC--分类
- 黑马程序员--oc:集合
- [黑马程序员][OC] 类
- [黑马程序员][OC]简介
- 【重读设计模式】桥接模式
- BZOJ 2190 [SDOI2008]仪仗队
- MD5Helper的方法
- uva 417 map暴力
- hdu 4405 Aeroplane chess (概率DP+求期望)
- 黑马程序员-OC多态
- 设计函数返回一个数组中所有元素被第一个元素除的结果
- 上海xx 双向链表 面试题 list node
- 第三章 3.5.4节练习
- C++ 学习笔记_0013_函数(猜数字、小学生算术运算)
- Centos提示-bash: make: command not found的解决办法
- LeetCode:Reverse Words in a String
- 用Mailslot写的客户端和服务器,客户端能向服务器多次发送消息,而服务器可以显示客户端发来的消息
- 数据库连接池