animal为什么在调用的时候需要强制转换(Dog)?

animal为什么在调用的时候需要强制转换(Dog)?

此题语句2中,已经定义了对象animal(Animal animal=new Dog()),为什么在调用Dog输出语句“汪汪汪”的时候仍需要强制转换?直接animal.shout()可以吗?

正在回答

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

3回答

不能直接animal.shout()这样写。因为animal的类型是Animal ,所以它是没有shout()这个方法的。强制转换后才能使用。祝:学习愉快

  • 慕码人5437048 提问者 #1
    明白了,后面的课程也讲到了。非常感谢哈
    2018-04-03 11:24:45
提问者 慕码人5437048 2018-04-03 10:45:17

亲,你好像回答的是别人的问题哦,我的问题是直接用animal.shout();这个语句调用可以吗?

  • 引用animal定义的是Animal类型,并没有转成Dog类型
    2018-04-03 11:02:04
  • 提问者 慕码人5437048 回复 irista23 #2
    收到了,谢谢啦
    2018-04-03 11:25:14
irista23 2018-04-02 17:25:58

可以通过instanceof运算符判断类型后,使用向下转型将父类引用转换成子类实例,调用子类特有的方法。同时,在类型转换时,需要注意括号的使用。如果仅仅是(Dog)animal.shout();表示的是,调用shout()方法后的结果转换为Dog类型。当((Dog)animal).shout();时表示的是将animal转换为Dog类型后,调用shout()方法。

  • 提问者 慕码人5437048 #1
    亲,你好像回答的是别人的问题哦,我的问题是直接用animal.shout();这个语句调用可以吗?
    2018-04-03 10:46:48
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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