多态:多种形态
来自不同类的对象可以定义共享相同名称的方法(不同类名,相同方法名)
id类型可以存储任何对象。
父类指针,指向子类对象
调用方法时,会检测对象的真实类型
代码示例:
@interface Animal : NSObject
-(void)run;
@end
@implementation Animal
-(void)run{
NSLog(@"跑");
}
@interface Dog ()
-(void)run;
@end
@implementation Dog
-(void)run{
NSLog(@"--dog run");
}
@end
Animal * d = [Dog new]; //父类指针,指向子类对象
[d run];//调用方法时,会检测对象的真实类型
//参数使用的是父类对象,可以传入父类、子类对象
void feed (Animal *a){
[a run];
}
//没有继承就没有多态
Dog * d = [Dog new];
Cat * s = [Cat new];
feed(d);
feed(s);
//父类类型的指针指向子类对象
Animal * aa = [Dog new];
//[aa run]; /*多态的局限性,父类类型的变量,不能用来调用子类的方法*/
[(Dog*)aa run];