OC语言—多态局限性
/* 多态局限性
1、代码的体现:父类的指针指向子类对象
2、优点:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
3、局限性;1->父类类型的变量 不能 直接调用子类特有的方法 必须强转为子类类型变量后,才能调用子类特有的方法
*/
#include <Foundation/Foundation.h>
@interface Animal : NSObeject
- (void)est;
@end
@implementation Animal
- (void)est
{
NSLog(@"吃东西");
}
@end
@interface Dog: Animal
- (void)run;
@end
@implementation Dog
- (void)run
{
NSLog(@"Dog-跑");
}
- (void)est
{
NSLog(@"Dog-吃东西");
}
@end
//如果参数中使用的是父类类型,可以传入父类、子类对象
void feed(Animal *a)
{
[a eat];
}
int main()
{
Animal *aa=[Dog mew];
//多态的局限性:父类类型的变量不能用来调用子类的方法
//[aa run];
Dog *dd=(Dog *)aa;
[dd run];
Dog *d=[Dog new];
[d run];
// //OC是弱语法,会弹出警告
// //Dog *d=[Animal new];
// //多种形态
// Dog *d=[Dog new];
// //多态:父类指针指向子类对象
// Animal *a=[Dog mew];
//
// //调用方法时会检测对象的真实形象
// [a eat];
//
// Dog *dd=[Dog new];
feed(dd);
return 0;
}
|
|