星空网 > 软件开发 > Java

转型操作并不改变对象在内存的形式

 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 */

结果:

  转型操作并不改变对象在内存的形式

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



原标题:转型操作并不改变对象在内存的形式

关键词:内存

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

2021年底,墨西哥电商价值将达500亿美元:https://www.ikjzd.com/articles/150541
圣诞在线购物需求激增,英国市场潜力巨大:https://www.ikjzd.com/articles/150543
EVOPS 推出升级版数字营销服务:https://www.ikjzd.com/articles/150544
亚马逊“封号”后遗症:跨境电商市场份额或重新分配:https://www.ikjzd.com/articles/150545
5个建议!利用帖子POSTS在黑五网一提升曝光:https://www.ikjzd.com/articles/150546
美指上涨接近年内高点,人民币汇率维持稳定:https://www.ikjzd.com/articles/150547
川藏线自驾游要怎么走才比较划算呢?:https://www.vstour.cn/a/411240.html
去日本入住酒店,东西随意用却有一个特殊“要:https://www.vstour.cn/a/411241.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流