向上转型
Dog test1=new Dog(); System.out.println(test1); Animal test = test1; System.out.println(test1); System.out.println(test); Dog test2=(Dog)test; System.out.println(test2);
我试了输出的引用地址一模一样
是不是向上转型过程中,实际这个animal的对象test实际应该指向new Dog(),由于是animal父类所以test成为了父类的对象只是java多态的特殊设定???
14
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小蓝
2022-01-27 16:31:55
同学你好~
首先,这里需要强调一下,任何情况下,对象一旦被创建,其[实际类型]是不会变化的。
其次,无论是强制类型转换(向下转型)还是自动类型提升(向上转型),更改的只是该对象的[引用类型]。
举个简单的案例就是,无论把一只狗打扮得多像一只猫(引用类型改变),其本质依然是狗(实际类型不变)。并且这只狗自出生之后,无论如何都无法变为其他物种(对象创建后类型确定)。
最后,Animal test = test1;这样的语句,其实就是将对象的地址进行了传递,即将test1的地址赋值到test变量中,这样两个变量存储的地址值是一样的,就会指向同一个对象。
综上,其实这段代码的核心原理和多态并没有直接联系,而是对象类型和地址传递的问题。
如果同学还有疑问,可以继续提问。祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星