向上转型问题
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、第一个问题,你的理解是正确的~
2、第二个问题,你的理解也是正确的~
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星