//多态:多种形态 对象有多种形态
//没有继承就没有多态,必须继承
#import <Foundation/Foundation.h>
//多态:父类的指针指向子类对象
//调用一个对象方法会检测对象的真实形象
//注意:
//Cat *c=[Animal new]; 这样都允许,OC是弱语法
//OC允许多继承吗
//多态的好处:
//如果函数/方法参数中使用的是父类类型,可以传入父类,子类对象
void feed(Dog *dog){
[dog eat];
}
void feed(Cat *cat){
[cat eat];
}
//多态使用后
void feed(Animal *a){
[a eat];
}
//多态的局限性
//父类类型的指针变量是不能来调用子类特有的方法,
//如果必须强转为子类类型后,才能调用子类特有的方法
//Animal *aa=[Dog new];
//[aa run]; //警告,虽然Animal没有run方法,Dog有
//,能运行,不要这样写,可以采用强制转换
// Dog *d=(Dog*)a; 类型转换是转 给编译器看的
//Dog *d=[Cat new]; 弱语法
//[d eat];//猫吃东西
//NSString *d=[Cat new];