按照 从柳柳桑那下载的《黑马之IOS葵花宝典.pdf》里面介绍的多态的概念是这样的:
多态:不同的对象以自己的方式响应父类同名的方法,这就是多态
它的实质就是:父类的指针指向了子类的对象
当然,这个得子类对象继承了父类的方法重写后才有的yo~
1.在父类对象可以调用子类对象的同名方法
Animal * ani_1 = [Dog new];
[ani_1 run]; //可以执行
父类对象调用子类不同命的方法时:
Animal * ani_1 = [Dog new];
//[ani_1 bark]; //编译时会报错
[(Dog *)ani_1 bark]; //调用成功
但是:
Animal * ani_2 = [Animal new];
//[ani_2 bark]; //编译时会报错
[(Dog *)ani_2 bark]; //编译时不会出错,但是运行错误。
就是说Animal里面声明实现了run方法的话,Dog 、 Cat 、 Person里面重新实现该方法,用Animal类对象指向了Dog、Cat、Person对象。然后将指针强制类型装换成对应的指针类型后就能分别调用三个不同子类的run方法了。
|
|