A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a_dream 中级黑马   /  2014-7-24 23:06  /  1843 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;
}

5 个回复

倒序浏览
不错:lol
回复 使用道具 举报
学习了。。。
回复 使用道具 举报
学习吧,呵呵
回复 使用道具 举报
这个可以调用吧?C++不可以,但是OC是运行时语言,会根据对象的真正类型来调用方法。
回复 使用道具 举报
孔思哲 来自手机 中级黑马 2014-11-24 19:21:29
地板
学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马