java转型 内存_[Java教程]转型操作并不改变对象在内存的形式

[Java教程]转型操作并不改变对象在内存的形式

0 2016-11-14 15:01:12 1 /* 2 需求:设计一个简单的java程序,证明强制转换语句并不能改变其在内存中的形式 3 思路:设计一个父子类,创建子类对象,将子类向上转型,查看转型前后该对象在内存中是否发生变化 4 */ 5 6 class ExchangeTest 7 { 8 public static void main(String[] args) 9 {10 Child c = new Child(23);11 System.out.println(c);12 Father f = (Father)c;13 c.show();14 f.show();15 System.out.println(f);//c和f都是指向了内存中同一个对象,且该对象是Child的实例对象16 }17 }18 19 class Father20 {21 int worknum;22 Father(int i){23 worknum = i;24 }25 void show(){26 System.out.println("Father " + worknum);27 }28 }29 30 class Child extends Father31 {32 int studynum;33 Child(int i){34 super(i);35 studynum = i;36 }37 void show(){38 System.out.println("Child " + studynum);39 }40 }41 42 43 /*44 总结:45 将子类向上转型后,子类对象在内存中依旧是子类对象,即使一个父类变量指向该对象后,该对象依旧是子类对象。46 47 48 运行时出现的bug49 -----------------------------------------------------------------------------------50 ExchangeTest.java:31: 错误: 无法将类 Father中的构造器 Father应用到给定类型;51 Child(int i){52 ^53 需要: int54 找到: 没有参数55 原因: 实际参数列表和形式参数列表长度不同56 1 个错误57 58 错误原因: 子类构造函数Child(int i){}中首行有个隐藏的默认语句super();该语句会调用59 父类的空参构造函数,因为父类写了Father(int i){} 所以原来隐藏的Father(){}60 没有了,因此子类构造函数中的super()找不到Father(){} 因此报错61 -----------------------------------------------------------------------------------62 */

结果:

bc91bb04e6e9c61e24c974e4440db8f2.gif总结: 将子类向上转型后,子类对象在内存中依旧是子类对象,即使一个父类变量指向该对象后,该对象依旧是子类对象。

本文网址:http://www.shaoqun.com/a/264634.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

内存

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值