OC 多态的运行 学习笔记
2015-07-26 11:00
267 查看
多态的概念
不同的对象以自己的方法相应父类同名的方法,这就是多态
体现:
父类指针指向子类对象
多态的条件
1.有继承关系
2.有方法重写(子类把父类的同名方法重写)
课堂练习的代码
多态:当子类的方法和父类的方法不是同名的情况,以上代码是同名的情况(编译器能找到run方法,因为声明的Animal类型里面有run方法).但是当子类有自己独特的方法时候
声明一个多态
例如:Animal *a3 = [Dog new];
这时候回编译错误,eat是Dog 的私有方法。但是这时候a3又是指向Dog类的,所以地址是可以访问过去的,这时候可以这样写
[a3 eat]错误
[(Dog *)a3 eat]; 这样就是正确的了,把a3强制转换成Dog类型,这时候就可以运行eat Dog类的私有方法了
注意编译器找声明类型的.h方法有没有。运行的时候找实际new出来的地址
不同的对象以自己的方法相应父类同名的方法,这就是多态
体现:
父类指针指向子类对象
多态的条件
1.有继承关系
2.有方法重写(子类把父类的同名方法重写)
课堂练习的代码
Animal *ani = [Animal new];//对象爷爷 [ani run]; Dog *d1 = [Dog new];//正常使用,爸爸 [d1 run]; Cat *cat = [Cat new];//正常使用,叔叔 [cat run]; //使用多态是,父类指针指向子类对象 Animal *a2 = [Dog new];//可以指向子类,也可以指向孙子类,例如声明一个其他的类,是Dog的子类的时候就可以,运行的时候结果是孙子类的方法,这就是多态,都是爷爷类型的指针但是运行的方法却是不同儿子孙子的方法 [a2 run];
多态:当子类的方法和父类的方法不是同名的情况,以上代码是同名的情况(编译器能找到run方法,因为声明的Animal类型里面有run方法).但是当子类有自己独特的方法时候
声明一个多态
例如:Animal *a3 = [Dog new];
这时候回编译错误,eat是Dog 的私有方法。但是这时候a3又是指向Dog类的,所以地址是可以访问过去的,这时候可以这样写
[a3 eat]错误
[(Dog *)a3 eat]; 这样就是正确的了,把a3强制转换成Dog类型,这时候就可以运行eat Dog类的私有方法了
注意编译器找声明类型的.h方法有没有。运行的时候找实际new出来的地址
相关文章推荐
- webStorm注册码
- git更新或者还原本地代码
- HDU-5311
- poj 2386 Lake Counting(深搜)
- C/C++带括号四则运算
- TreeSet具体应用
- C语言缓冲区(缓存)详解
- 整体代码缩进
- 可变参数函数
- HDU 5297 Y sequence(数论 迭代 容斥原理)
- 图片裁剪类
- poj 3468 A Simple Problem with Integers(线段树、延迟更新)
- FindBugs:Compiler output path for module can not be null. check your module/project settings问题原因
- 阿里大数据之夏—我的坎坷进阶路
- How Many Fibs?
- greedy algorithm DEMO
- 【项目2-三数最大值】
- Scala详解---------继承深入
- 天天的招聘,天天的解聘!民营医疗你的人才在哪?
- 金额转大写及日期转大写(java)