1.多态的基本概念
某一类事物的多种形态
OC对象具有多态性
2.多态的体现
Person *p = [Student new];
p->age = 100;
[p walk];
子类对象赋值给父类指针
父类指针访问对应的属性和方法
3.多态的好处
用父类接收参数,节省代码
4.多态的局限性
不能访问子类的属性(可以考虑强制转换)
5.多态的细节
动态绑定:在运行时根据对象的类型确定动态调用的方法
6.代码
1#import<Foundation/Foundation.h>23/*4多态51.没有继承就没有多态62.代码的体现:父类类型的指针指向子类对象73.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象84.局限性:91> 父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法10*/1112//动物13@interfaceAnimal : NSObject14- (void)eat;15@end1617@implementationAnimal18- (void)eat19{20NSLog(@"Animal-吃东西----");21}22@end2324//狗25@interfaceDog : Animal26- (void)run;27@end2829@implementationDog30- (void)run31{32NSLog(@"Dog---跑起来");33}34- (void)eat35{36NSLog(@"Dog-吃东西----");37}38@end3940//猫41@interfaceCat : Animal4243@end4445@implementationCat46- (void)eat47{48NSLog(@"Cat-吃东西----");49}50@end5152//这个函数是专门用来喂动画53//void feed(Dog *d)54//{55//[d eat];56//}57//58//void feed2(Cat *c)59//{60//[c eat];61//}62//6364//如果参数中使用的是父类类型,可以传入父类、子类对象65voidfeed(Animal *a)66{67[a eat];68}6970intmain()71{72//NSString *d = [Cat new];73//[d eat];7475/*76Animal *aa = [Dog new];77// 多态的局限性:父类类型的变量 不能 用来调用子类的方法78//[aa run];7980// 将aa转为Dog *类型的变量81Dog *dd = (Dog *)aa;8283[dd run];84*/8586//Dog *d = [Dog new];8788//[d run];8990/*91Animal *aa = [Animal new];92feed(aa);9394Dog *dd = [Dog new];95feed(dd);9697Cat *cc = [Cat new];98feed(cc);99*/100101/*102// NSString *s = [Cat new];103Animal *c = [Cat new];104105106NSObject *n = [Dog new];107NSObject *n2 = [Animal new];108109110// 多种形态111//Dog *d = [Dog new]; // Dog类型112113// 多态:父类指针指向子类对象114Animal *a = [Dog new];115116// 调用方法时会检测对象的真实形象117[a eat];118*/119return0;120}