关于选项A,求问,谁帮帮我?

关于选项A,求问,谁帮帮我?

http://img1.sycdn.imooc.com//climg/5ce296430001808306290111.jpg

想知道为什么A是错的?主方法里面Animal animal=new Dog(); 那么下面代码的animal指向的就是new Dog()啊,然后animal调用shout();

if(animal instanceof Dog)

 (Dog) animal.shout();

  else

  ((Roo)animal).leap();

下面这段斜体加粗是一个老师写的,看了她的我更加不懂了

“A选项中 在Manager的play方法中是一个Animal类型的参数,Animal类型可以传入子类型Roo类型也可以是Dog类型,当传入是Roo类型时,(Dog)animal.shout();这个语句是会报错的哦!”

正在回答

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

4回答

同学的说法是正确的哦!   非常抱歉,是老师没有注意到这个问题,A选项中(Dog)animal.shout();这个写法有错!  非常感谢同学提出的问题。继续加油~

祝:  学习愉快~

好帮手慕小班 2019-05-21 18:50:38

同学你好,在//1处的if条件判断中使用instanceof是没有编译错误的,例如:

http://img1.sycdn.imooc.com//climg/5ce3d61e0001333306580270.jpg

2、强转本身没有问题,但是如果传入的类型不同,程序是有问题的:

http://img1.sycdn.imooc.com//climg/5ce3d76600017a1405530289.jpg

http://img1.sycdn.imooc.com//climg/5ce3d7d90001d67f09130424.jpg

如果传入的animal对象是Roo的实例化对象,程序是会报错的!

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 慕码人4259003 #1
    啊。。。老師你這樣子肯定是對的啊而且能解釋你的說法。因為你的強轉本身就沒有錯誤啊,但是我問的是A選項,你看看A選項的強轉,A選項他的強轉是(Dog)animal.shout(); 而你的強轉是((Dog)animal).shout()。用你的強轉解釋你的問題是成立的。但是A選項是錯誤的。你以A選項(錯誤的強轉)回答你的解釋就是錯誤的。你是不是沒看清楚題目和選項A是什麼?
    2019-05-21 19:06:21
好帮手慕小班 2019-05-21 10:27:23

同学你好,关于A选项中,1、在Manager类中Animal是参数,这里需要调用Dog类中的shout方法,Animal是一个父类,是Dog类和Roo的父类,所以这个的Animal既可以强转为Dog又可以强转为Roo哦!

2、选项中是直接强转为Dog,然后调用Dog类中的shout方法,如(Dog)animal.shout();,但是当传入对象是Roo类时,Roo类中没有shout方法,这时这条语句会直接报错哦!所以在1处添加的语句需要加instances的判断哦!

3、以为最后需要调用Dog类中的shout方法来执行输出语句,所以这里需要new  Dog();哦!

所以综上所述需要选择C选项哦!

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 慕码人4259003 #1
    老师,改成选项A (Dog)animal.shout(); (Dog)animal.shout(); 1处加了if(animal instanceof Dog) 也是编译错误的。就是老师,我觉得不是Roo类没有shout()方法的问题,第一,(Dog)animal.shout();这里的强转调用本来就有问题,应该是((Dog)animal().shout(),而不是考虑Roo类没有shout(),在Mannager类通过调用animal调用shout(),系统首先判断的是Animal类有没有shout(),所以要((Dog)animal),这样子if和instanceof才能有效判断引用指向的是哪个对象进而调用相应的方法。 if(animal instanceof Dog) ((Dog)animal).shout(); else ((Roo)animal).leap(); 总结来说,我是认为问题不是Roo没有shout(),而是强转的问题
    2019-05-21 16:47:14
提问者 慕码人4259003 2019-05-20 20:02:03

这个是补充的代码

http://img1.sycdn.imooc.com//climg/5ce297340001654806411229.jpg

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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