- 对象具备多种形态就是多态;
- 没有继承就没有多态;
- 父类指针指向子类对象;Animal *a = [Dog new]; [a eat];
- 调用方法是会检测对象的真是形象;
- NSObject *n = [Dog new];
- NSObject *n = [Animal new];
- OC是弱语法;runtime动态属性;只会出现警告,不会报错;
- 多态的好处:
- 喂狗;喂猫;可以用喂动物来代替;因为猫和狗有共同父类;
- 如果参数中使用的是父类类型,可以传入父类,子类对象;
- 多态的限制:
- 父类类型的变量不能用来调用子类的方法;Animal *aa = [Dog new];
- aa指向的是Animal类型;我们使用强制类型转换为Dog类型:
- Dog *dd = (Dog *)aa;
- 多态
- 没有继承就没有多态
- 代码的体现:父类类型的指针指向之类对象;
- 好处:如果函数、方法参数中使用的是父类类型,可以传入父类、子类对象;
- 局限性:父类类型的变量不能直接调用子类特有的方法;必须强转为子类类型变量后,才能直接调用子类类型方法;