方案2的向上转型

方案2的向上转型

public void feed(Animal obj) {

obj.eat();

if(obj instanceof Cat) {

Cat temp=(Cat)obj;

temp.playBall();

}else if(obj instanceof Dog) {

Dog temp=(Dog)obj;

temp.sleep();

}

老师,传入的子类的对象引用one和two,而feed方法的参数是父类的对象引用,在one和two时,是不是有默认的向上转型?

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

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

2回答
好帮手慕小班 2019-06-05 18:35:44

同学你好,1、这里非常抱歉给同学造成的误解,这里同学的说法是正确的哦,这里老师是没有注意到在测试方法中是 Cat  cat=new Cat();  Dog  dog=new Dog();  这样的实例对象,接受类型是子类,然后将子类对象cat在方法的调用时直接转为Animal,这是向上转型哦!

2、但是如果在测试类中 Animal  cat =new Cat();是这样的实例对象,那么这个public void feed(Animal obj) {}  方法中的Animal对象就不是向上转型哦!因为多态并不是向上转型哦!

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


  • 提问者 鱼儿0001 #1
    谢谢老师的耐心回复,老师的第二条回复里,Animal cat=new Cat();------》这行代码是向上转型,对吗?而继续往下,public void feed(Animal obj){},此时将cat传入feed方法,cat是作为Animal的对象引用传入,在这里没有向上转型,对吗?
    2019-06-05 19:05:45
  • 好帮手慕小班 回复 提问者 鱼儿0001 #2
    同学的说法是正确的哦! 很棒呐! 继续加油~ 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-06-05 19:50:40
  • 提问者 鱼儿0001 回复 好帮手慕小班 #3
    好的,谢谢老师!
    2019-06-06 15:19:28
好帮手慕小班 2019-06-04 19:51:04

同学你好,这里并不是隐藏的向上转型,而是在JVM中传入调用时可以使用父类类型来接收子类的对象,这里涉及JVM的底层实现,并不是隐藏的向上转型!

基础阶段会使用就好,后面同学学习深入后就会理解的。

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

  • 提问者 鱼儿0001 #1
    可是在课程里说这是向上转型啊
    2019-06-05 17:04:06
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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