您的位置:首页 > 其它

多态的概念和条件

2015-11-30 00:00 357 查看
摘要: 多态的概念和条件

多态的概念和条件

1、什么是多态?

什么是多态:多态就是某一类事物的多种形态

程序中的多态:不同的对象以自己的方式响应相同名称方法的能力称为多态

2、多态的条件

多态的条件:有继承关系、有方法重写

父类的声明变量指向子类对象。

//代码体现:用父类类型的指针指向了子类对象,这就是多态

狗 *g = [狗 new];
动物 *a = [狗 new];
猫 *c = [猫 new];
动物 *a = [猫 new];


3、多态的优点

多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用 为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现 接口的类的区分开来。

多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有可能的对象。 这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行 改动,而只需要增加一个新的类和新的同名方法。

多态的实现

1、如何实现多态?
Animal是父类,子类有Cat 和 Dog,子分别重写了父类中的eat方法;实例化对象的时候可以用下

面的方法:

Animal *animal = nil;

//实例化猫的对象
animal = [Cat new];
[animal eat];

//实例化狗的对象
animal = [Dog new];
[animal eat];


2、多态的原理

动态绑定:
动态类型能使程序直到执行时才确定对象所属类型
动态类型绑定能使程序直到执行时才确定要对对象调用的实际方法
OC不同于传统程序设计语言,它可以再运行时加入新的数据类型和新的程序模块:动态类型 识别,动态绑定,动态加载
id类型:通用指针类型,弱类型,编译时不进行类型检查


3、多态的注意点

1)如果存在多态,父类是可以访问子类特有的方法

假设 子类 Dog 有一个特有的方法bark
[dog bark];
Animal *an2 = [Dog new];
[(Dog*)an2 bark]; //把父类的指针,强制类型转换


2)如果不存在多态,父类是不可以访问子类特有的方法的

Animal *an3 = [Animal new];
[(Dog*)an3 bark]; //
错误的,不能强制转换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: