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

© 15342193033 中级黑马   /  2014-12-28 09:39  /  1219 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


子类Dog中声明和实现-(void)run方法
{
NSLog(@"Dog run");
}
而父类Animal中没有声明和实现-(void)run方法
则main函数中:
{
Animal *aa = [Dog new];//这样写不行?需要强制类型转换?
[aa run];
}

所以main函数需要这样写:
{

Animal *aa = [Dog new];
Dog *dd =(Dog *)aa;//强制类型转换,这两句有点懵,这是谁换成谁啊???
[dd run];
}

2 个回复

倒序浏览
这代码想告诉我们的是,可以直接用基类指针指向派生类对象,不需要进行指针转换,
但是如果用基类指针初始化派生类指针,需要将基类指针转换成派生类的类型.
回复 使用道具 举报
这是多态,为了避免出警告,所以强制转换。如果不强制转换也行,虽然能执行,但是会出警告。那是将父类指针类型的变量aa,强制转换成Dog *类型的变量,这样就能避免编译器出警告
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马