关于D选项

关于D选项

我又看了看,自己敲了一下代码,我自己理解了一下,你看看对不对,强转的前提应该它本身是这个类型,即new构造时,指向的堆空间是它自己,但是栈里存的确实比它大的类型,如Animal one=new Cat(),所以,在类型强转后,如Cat  two=(Cat)one 所以它指向的堆空间还是Cat类的,只是栈地址变了,这也是为什么Cat one=(Cat)new Animal() 会报错的原因,直接这样写,指向的是animal类的堆空间, 所以转不了Cat类的堆空间,所以运行会报错。这个D选项,想正确输出应该把new Animal()改成new Roo() ,再把下边的new也去掉就对了

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕查理 2018-12-19 13:35:02

您好,按照同学的修改方式最后D选项的代码应该是:

    Animal pet = new Roo();
    Roo roo =  (Roo)pet;
    roo.leap();

简化后则与B选项相同。

    Animal one=new Roo();
    ((Roo)one).leap();

向上转型需要先将对象向下转型,再进行强制类型转换。同学可以回顾一下视频中向下转型需要满足的条件。祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师