关于intanceof的用法

关于intanceof的用法

http://img1.sycdn.imooc.com/climg//5933f512000100a904190794.jpg

http://img1.sycdn.imooc.com/climg//5933f5120001a3aa10050286.jpg

为什么A是错的?

http://img1.sycdn.imooc.com/climg//5933f5550001f4b510030452.jpg

为什么C是错的? C不能输出吗 和B选项的差别在哪里?

正在回答

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

2回答

你好,A不对的原因是如果2处new的是一个动物,那么1处只能走else了,强制转为Roo就会报错了。C不对的原因是1处,这样就限定死了,传回的动物必须是Dog,程序太死。祝:学习愉快

lijikai1937 2017-06-05 11:29:26
((Dog) animal).shout();
/*把c改一下就可以输出了,上面这样。
B就是添加了逻辑判断,因为我们有两个子类,为了严谨,必须把所有的情况都考虑进去,其实我也觉得没必要
加判断,但是为了程序更好,加比较好*/
Animal animal=new Animal();
/*创建一个animal对象,可是你看一下,Animal这个类里面是什么都没有的。我觉得这里可以理
解为它只是用来乘装我们后面创建的子类对象的。否则你在参数传递的时候就需要写两种方法了。
Animal animal
可以接收Dog类的对象,也可以接收Roo类的对象。我们后面调用的方法,全部都是子类特有的方法。不是重写父类的
话说我当时选对了,好像也没仔细看,看了半天才知道怎么给你回答的。你还有啥想知道的吗?希望帮到你啊*/


  • 提问者 音殿 #1
    请问为什么把C改成这样就可以了?((Dog) animal).shout(); C的执行顺序问题吗?怎么执行的?
    2017-06-05 12:52:58
  • lijikai1937 回复 提问者 音殿 #2
    这个是强制类型转化啊。你是不是没看老师视频,这个地方类型转换就是这样的,转换了之后就可以调用Dog类里面特有的方法了。shout();这个方法。我们不就是为了实现调用这个方法而做题的吗?
    2017-06-05 13:49:36
  • lijikai1937 回复 提问者 音殿 #3
    我觉得应该是强制类型转换啊,要不你再提问一下,问问老师。反正我刚才把这段代码在eclipse里面运行了,是要这么改就可以得到目的了。
    2017-06-05 13:51:00
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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