什么是多态
考虑一个问题:父类能否访问子类的方法
多态就是某一类事物的多种形态。在程序中的多态:不同对象以自己的方式,响应相同名称方法的能力
称为多态(不同的对象以自己的方式相应父类同名的方法,这就是多天)
多态的条件
1.有继承关系
2.有方法重写//子类把父类的同名方法重写
//代码体现:用父类的类型的指针指向子类对象,这就是多态
Dog *g = [Dog new];
Animal *a = [Dog new];//多态
多态的优点
简化编程接口。他允许在类和类之间重用一些习惯性的命名。而不用为每一个新家的函数明明一个新的名字。
这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类区别开来。多态也使得代码可以分散在不
同的对象中而不用试图在一个函数中考虑到所有可能的对象。这样使得您的代码扩展性和复用性更好一些。
当一个新的情景出现的是后,您无需对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。
多态的实现
1.子类继承父类
2.子类重写父类的方法
3.父类指针指向子类对象
Dog *g = [Dog new];
Animal *a = [Dog new];//多态
[a run];
run方法被Dog重写过,所以运行的Dog中的run.
多态的原理
程序直到运行的时候,才知道执行时才确定对象所有的类型。
动态类型的绑定使程序直到执行时才确定要对对象调用的实际的方法
OC不同于传统的程序设计语言, 他可以运行时加入新的数据类型和新的程序模块:动态类型
识别,动态绑定,动态加载
id类型:通用指针类型,弱类型,编译时不进行检查。
多态的注意点
1.父类可以调用子类的方法,并且该方法不存在于父类
Animal *a = [Dog new];
[a eat];//这样写的话,无法执行,因为Animal的.m文件中并没有eat方法
Animal *a = [Dog new];
[(Dog *)a eat];//这样就OK了,进行了一次强制转换
Animal a = [Animal new];
[(Dog *)a8 eat];//这样强制转换不可行,程序编译时没有错误,但是运行的时候,会报错
考虑一个问题:父类能否访问子类的方法
多态就是某一类事物的多种形态。在程序中的多态:不同对象以自己的方式,响应相同名称方法的能力
称为多态(不同的对象以自己的方式相应父类同名的方法,这就是多天)
多态的条件
1.有继承关系
2.有方法重写//子类把父类的同名方法重写
//代码体现:用父类的类型的指针指向子类对象,这就是多态
Dog *g = [Dog new];
Animal *a = [Dog new];//多态
多态的优点
简化编程接口。他允许在类和类之间重用一些习惯性的命名。而不用为每一个新家的函数明明一个新的名字。
这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类区别开来。多态也使得代码可以分散在不
同的对象中而不用试图在一个函数中考虑到所有可能的对象。这样使得您的代码扩展性和复用性更好一些。
当一个新的情景出现的是后,您无需对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。
多态的实现
1.子类继承父类
2.子类重写父类的方法
3.父类指针指向子类对象
Dog *g = [Dog new];
Animal *a = [Dog new];//多态
[a run];
run方法被Dog重写过,所以运行的Dog中的run.
多态的原理
程序直到运行的时候,才知道执行时才确定对象所有的类型。
动态类型的绑定使程序直到执行时才确定要对对象调用的实际的方法
OC不同于传统的程序设计语言, 他可以运行时加入新的数据类型和新的程序模块:动态类型
识别,动态绑定,动态加载
id类型:通用指针类型,弱类型,编译时不进行检查。
多态的注意点
1.父类可以调用子类的方法,并且该方法不存在于父类
Animal *a = [Dog new];
[a eat];//这样写的话,无法执行,因为Animal的.m文件中并没有eat方法
Animal *a = [Dog new];
[(Dog *)a eat];//这样就OK了,进行了一次强制转换
Animal a = [Animal new];
[(Dog *)a8 eat];//这样强制转换不可行,程序编译时没有错误,但是运行的时候,会报错