黑马程序员技术交流社区

标题: 继承中的强制类型转换 [打印本页]

作者: 15342193033    时间: 2014-12-28 09:39
标题: 继承中的强制类型转换

子类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];
}


作者: zhaozigeng    时间: 2014-12-28 10:05
这代码想告诉我们的是,可以直接用基类指针指向派生类对象,不需要进行指针转换,
但是如果用基类指针初始化派生类指针,需要将基类指针转换成派生类的类型.
作者: chasedream    时间: 2014-12-28 10:31
这是多态,为了避免出警告,所以强制转换。如果不强制转换也行,虽然能执行,但是会出警告。那是将父类指针类型的变量aa,强制转换成Dog *类型的变量,这样就能避免编译器出警告




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2