多态的意思:多种形态(对象的多种形态)
父类指针指向子类对象
Animal * a = [Dog new];
调用方法时会检测对象的真实形象
[a eat];//调用的还是子类的方法(Dog)
多态的使用注意
当使用多态的时候要注意逻辑性
比如
//如果这样写的话 狗是一只猫 明显是错误的
但是编译器并不会报错
Cat * c = [Dog new];
多态的好处
如果参数中使用的父类类型 那么父类和子类类型都可以传入
比如说想喂狗和猫
定义声明以后
声明一个函数
void feed(Animal *a)
{
[a eat];
}
接着在main函数里面
创建动物对象以及猫和狗对象
然后
Animal *aa = [Animal new];
feed(aa)//表示把对象动物 传入给了函数feed里面去 就可以喂动物了
同样的
Dog *dd = [Dog new];
feed(dd);//把动物这个对象也传入给了函数feed 就可以给狗喂东西了
eat动物吃东西和feed 喂动物是不一样的
多态的局限性
不能直接用父类指针调用子类方法
强转
Animal *aa =[Dog new];
Dog *dd = (Dog *)aa;//把父类类型强转成Dog(子类)类型
多态总结
1>没有集就没有多态
2>代码的体现:父类类型的指针指向子类对象
3>好处:如果函数\方法参数中使用的是父类类型,可以传入父类,子类对象
4>局限性
父类类型的变量 不能 直接调用子类特有的方法.必须强转为子类类型变量后,才能直接调用子类特有的方法