黑马程序员技术交流社区
标题:
OC语言—多态局限性
[打印本页]
作者:
a_dream
时间:
2014-7-24 23:06
标题:
OC语言—多态局限性
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;
}
作者:
天蚕飞
时间:
2014-7-25 12:54
不错:lol
作者:
黄莉萍
时间:
2014-7-25 14:21
学习了。。。
作者:
a_dream
时间:
2014-7-25 22:08
学习吧,呵呵
作者:
istream
时间:
2014-7-25 23:42
这个可以调用吧?C++不可以,但是OC是运行时语言,会根据对象的真正类型来调用方法。
作者:
孔思哲
时间:
2014-11-24 19:21
学习学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2