黑马程序员----oc基础笔记----多态
2015-09-05 16:42
351 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、什么是多态
多态就是某一类事物的多种形态
猫:猫-->动物
狗:狗-->动物
男人:男人-->人-->高级动物
女人: 女人-->人-->高级动物
程序中的多态:不同的对象以自己的方式响应相同名称方法的能力称为多态
2、多态的条件
多态的条件:有继承关系、有方法重写
父类的声明变量指向子类对象。
//代码体现:用父类类型的指针指向了子类对象,这就是多态
狗 *g = [狗 new];
动物 *a = [狗 new];
猫 *c = [猫 new];
动物 *a = [猫 new];
3、多态的优点
多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。
多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有可能的对象。这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。
4、多态的实现
代码实现及理解:
创建一个动物的类,声明部分
创建一个继承动物类的狗类,声明部分:
狗类的实现部分:
创建一个继承动物类的猫类,声明部分:
猫类的实现部分:
创建一个继承狗类的大黄狗类,声明部分:
主函数部分:
1、什么是多态
多态就是某一类事物的多种形态
猫:猫-->动物
狗:狗-->动物
男人:男人-->人-->高级动物
女人: 女人-->人-->高级动物
程序中的多态:不同的对象以自己的方式响应相同名称方法的能力称为多态
2、多态的条件
多态的条件:有继承关系、有方法重写
父类的声明变量指向子类对象。
//代码体现:用父类类型的指针指向了子类对象,这就是多态
狗 *g = [狗 new];
动物 *a = [狗 new];
猫 *c = [猫 new];
动物 *a = [猫 new];
3、多态的优点
多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。
多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有可能的对象。这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。
4、多态的实现
代码实现及理解:
创建一个动物的类,声明部分
#import <Foundation/Foundation.h> @interface Animal : NSObject -(void)run; @end动物类的实现部分:
#import "Animal.h" @implementation Animal -(void)run{ NSLog(@"动物在跑"); } @end
创建一个继承动物类的狗类,声明部分:
#import "Animal.h" @interface Dog : Animal -(void)run; //这句话可以不写 -(void)eat; @end
狗类的实现部分:
#import "Dog.h" @implementation Dog -(void)run{ NSLog(@"狗以80码的速度冲出去,没撞树上!"); } -(void)eat{ NSLog(@"狗在吃东西"); } @end
创建一个继承动物类的猫类,声明部分:
#import "Animal.h" @interface Cat : Animal @end
猫类的实现部分:
#import "Cat.h" @implementation Cat -(void)run{ NSLog(@"猫在爬树,被蜜蜂蛰了"); } @end
创建一个继承狗类的大黄狗类,声明部分:
#import "BigYellowDog.h" @implementation BigYellowDog -(void)run{ NSLog(@"大黄狗在跑,撞猪上了"); } @end
主函数部分:
/* 多态的概念: 不同的对象以自己的方式响应父类同名的方法,这就是多态 体现出来: 父类的指针指向了子类的对象 多态的条件: 1) 有继承关系 2)有方法重写(子类把父类的同名方法给重写了) */ #import <Foundation/Foundation.h> #import "Dog.h" #import "Cat.h" #import "BigYellowDog.h" int main(int argc, const char * argv[]) { @autoreleasepool { //****** 没有使用多态 ****** Animal *ani = [Animal new]; [ani run]; Dog *d1 = [Dog new]; [d1 run]; Cat *cat = [Cat new]; [cat run]; //********* 使用多态 **** //父类指针 指向了 子类对象 Animal *a2 = [Dog new]; [a2 run]; Animal *a3 = [Cat new]; [a3 run]; Dog *d4 = [BigYellowDog new]; [d4 run]; Animal *an5 = [BigYellowDog new]; [an5 run]; //*********** 多态的使用注意 ********** Animal *an6 = [Dog new]; //an6 Animal类型 //编译的时候会报错 [an6 eat]; //报错 //能否执行? (Dog *)an6 把an6强制转化为 Dog类型 [(Dog *)an6 eat]; //正确的 //下面的用法是错误的 Animal *a8 = [Animal new]; [a8 eat]; //不可以,错误的用法 //骗编译器 [(Dog *)a8 eat]; } return 0; }
相关文章推荐
- 运行时和常见面试题目
- 面试题28:字符串的排列
- 百度面试
- 面试题 10
- iOS求职之OC面试题
- 面试题-随机生成数
- 腾讯2015实习生招聘基础研究岗笔试面试总结
- 黑马程序员--IO流(Properties、打印流 、文件切割与合并)
- 黑马程序员----oc基础笔记----类和对象
- 黑马程序员——总集篇
- 黑马程序员java之正则表达式
- 黑马程序员java之反射
- 《剑指Offer》面试题:合并两个排序的链表
- 黑马程序员——46,enum枚举类的简单应用
- 黑马程序员java之多线程
- 黑马程序员—Java之面向对象
- 面试题 9 Fibonacci数列
- 我的程序员未婚夫
- 高欢的职业生涯
- 黑马程序员java基础学习日记——做题遇到GBK查资料发现了个有趣的文章——ASCII、Unicode、GBK和UTF-8字符编码的区别联系