向上转型

向上转型

		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多态的特殊设定???

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

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

1回答
好帮手慕小蓝 2022-01-27 16:31:55

    同学你好~

    首先,这里需要强调一下,任何情况下,对象一旦被创建,其[实际类型]是不会变化的。

    其次,无论是强制类型转换(向下转型)还是自动类型提升(向上转型),更改的只是该对象的[引用类型]。

    举个简单的案例就是,无论把一只狗打扮得多像一只猫(引用类型改变),其本质依然是狗(实际类型不变)。并且这只狗自出生之后,无论如何都无法变为其他物种(对象创建后类型确定)。

    最后,Animal test = test1;这样的语句,其实就是将对象的地址进行了传递,即将test1的地址赋值到test变量中,这样两个变量存储的地址值是一样的,就会指向同一个对象。

    综上,其实这段代码的核心原理和多态并没有直接联系,而是对象类型和地址传递的问题。

    如果同学还有疑问,可以继续提问。祝学习愉快~


  • 提问者 胖胖的工程师 #1

    test1实类型是dog,引用类型是animal没

    2022-01-27 17:09:35
  • 同学你好,是这样的,引用类型是Animal,实际类型是Dog。

    祝学习愉快~

    2022-01-27 17:11:01
  • 如果引用类型变了,为什么打印输出test1的地址还是之前的,如果是因为Animal test = test1;那么tets1新的引用地址是什么



    2022-01-27 17:41:03
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

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

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

在线咨询

领取优惠

免费试听

领取大纲

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