父类指针指向子类对象,多态的使用方法、好处、限制见下段代码例子:
#import
//多态:父类指针指向子类指针
@interface Animal : NSObject
- (void) eat;
@end
@implementation Animal
- (void) eat
{
NSLog(@"Animal吃东西!");
}
@end
@interface Dog : Animal
- (void) run;
@end
@implementation Dog
- (void) eat
{
NSLog(@"Dog吃东西!");
}
- (void) run
{
NSLog(@"Dog跑起来!");
}
@end
//多态的好处:喂动物的函数(既可以喂狗、也可以喂其他动物,如此可以减少代码量)
//传入父类对象,在具体调用的时候既可以传入父类对象,也可以传入子类方法
void feed(Animal *animal)
{
NSLog(@"喂动物!");
}
int main()
{
//指针动态检测指向的对象的真实类型
Animal *a = [Dog new];//多态
[a eat];
//多态的限制:父类中没有run方法,当用指向父类的指针多态指向此方法时,编译器会报错(可运行),不建议这么做,此处用强制转换
Dog *dd = (Dog *) a;
[dd run];
return 0;
} |
|