为了账号安全,请及时绑定邮箱和手机立即绑定

Cat cat=(Cat)animal;//编译时是按Cat类型,为什么运行时是按Dog类型?

是不是因为在他之上有 Dog dog2=(Dog)animal;这一句,已经把animal转成了Dog类型,所以运行时是按照Dog类型?

正在回答

4 回答

有解答么。。。

0 回复 有任何疑惑可以回复我~

在继承中,子类向父类转换称为“向上转型”,将父类向子类转换称为“向下转型”。
很多时候,我们会将变量定义为父类的类型,却引用子类的对象,这个过程就是向上转型。程序运行时通过动态绑定来实现对子类方法的调用,也就是多态性。
然而有些时候为了完成某些父类没有的功能,我们需要将向上转型后的子类对象再转成子类,调用子类的方法,这就是向下转型。
注意:不能直接将父类的对象强制转换为子类类型,只能将向上转型后的子类对象再次转换为子类类型。也就是说,子类对象必须向上转型后,才能再向下转型。

因为向下转型存在风险,所以在接收到父类的一个引用时,请务必使用 instanceof 运算符来判断该对象是否是你所要的。

 Dog dog2=(Dog)animal

这里你已经强制转换了,可以能存在风险,但是编译可以通过,运行时可能会出现问题,建议使用instanceof判断。

3 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

Cat cat=(Cat)animal;//编译时是按Cat类型,为什么运行时是按Dog类型?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信