一.基本概念
多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象。
如果函数或参数中使用的是父类类型,可以传入父类、子类对象,但是父类类型的变量不能直接调用子类特有的方法。
Animal类的声明和实现
// 动物 @interface Animal : NSObject - (void)eat; @end @implementation Animal - (void)eat { NSLog(@"Animal-吃东西----"); } @end
Dog类继承自Animal类
// 狗 @interface Dog : Animal - (void)run; @end @implementation Dog - (void)run { NSLog(@"Dog---跑起来"); } //重写Animal的eat方法 - (void)eat { NSLog(@"Dog-吃东西----"); } @end
#import <Foundation/Foundation.h> // 动物 @interface Animal : NSObject - (void)eat; @end @implementation Animal - (void)eat { NSLog(@"Animal-吃东西----"); } @end // 狗 @interface Dog : Animal - (void)run; @end @implementation Dog - (void)run { NSLog(@"Dog---跑起来"); } - (void)eat { NSLog(@"Dog-吃东西----"); } @end // 如果参数中使用的是父类类型,可以传入父类、子类对象 void feed(Animal *a) { [a eat]; } int main() { // 多态:父类指针指向子类对象 Animal *a = [Dog new]; //调用方法时会检测对象的真实形象 [a eat]; return 0; }
结果:Dog-吃东西----
二.多态总结
- 没有继承就没有多态
- 代码的体现:父类类型的指针指向子类对象
- 好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
- 局限性:父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法
时间: 2024-10-13 00:33:23