向上转型问题

向上转型问题

class Animal{


}


class Dog extends Animal{

public void shout(){

System.out.println("汪汪汪!");

}

}


class Roo extends Animal{

public void leap(){

System.out.println("无忧无虑哦!");

}

}


class Manager{

public void play(Animal animal){

if(animal instanceof Dog)

((Dog)animal).shout();

else

((Roo)animal).leap();

}

}


public class Demo{

public static void main(String[] args){

//Animal animal=new Dog();

Dog dog=new Dog();

new Manager().play(Dog);


}

}

老师,在这段代码里:

//Animal animal=new Dog();

Dog dog=new Dog();

new Manager().play(dog);

1、Dog类的对象引用dog作为参数被传进了Manager类的play方法中,而play方法的参数是Animal类型的,这时候是完成了隐式的向上转型吗?老师的理解对吗?

2、如果将上面三段代码改为:

Animal animal=new Dog();

// Dog dog=new Dog();

new Manager().play(animal);

此时,父类引用animal指向子类Dog的实例,完成的是向上转型,然后将animal作为参数传入play方法里,play方法的参数本来就是父类对象的引用,所以传入play方法时,animal并没有向上转型。老师,我的理解对吗?你就说对或者不对。

正在回答

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

1回答

同学你好,

1、第一个问题,你的理解是正确的~

2、第二个问题,你的理解也是正确的~

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

  • 鱼儿0001 提问者 #1
    谢谢老师,关于我的第一个问题,我的理解真的没错吗?我是指,将Dog类的对象dog传入play方法,play方法的参数是Animal类的,这里完成的是隐式的向上转型,真的没有问题吗?
    2019-08-22 14:17:38
  • 好帮手慕酷酷 回复 提问者 鱼儿0001 #2
    同学你好,你理解的是没有问题的~相信自己~这里确实完成了一个隐式的向上转型! 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!​
    2019-08-22 14:58:31
  • 鱼儿0001 提问者 回复 好帮手慕酷酷 #3
    好的,谢谢老师!我确实不太相信自己,总怕出错。
    2019-08-23 14:38:17
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

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

请稍等 ...
微信客服

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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