为了账号安全,请及时绑定邮箱和手机立即绑定

java继承程序,答案为什么是:0?

java继承程序,答案为什么是:0?

素胚勾勒不出你 2018-10-10 12:41:01
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

我用了最笨的方法,new 一个对象的时候,实际是在jvm里面分配内存,初始化参数,基本参数为0,引用参数为null.并没有赋值,从上面我们可以看到,new 子类先走父类构造,调text()时,子类重写了所以走自己的text,此时的a并没有赋值,所以输出是0.但我完成对象的构建过后,再输出a,此时已经赋值完成,输出了6.这个都是JVM的一些东西,比较复杂

查看完整回答
反对 回复 2018-10-24
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

兄弟,我查了好久,
这个程序的执行顺序是:建立子类sub的对象,接着调用父类的构造方法Super,Super中调用test方法,此时test方法调用的是子类的test方法,而不是Super类的,原因是建立的是子类的对象,这一点类似于Super s= new Sub(); s.test调用的就是子类的test方法;说完原因,这个是时候由于子类的构造方法还没有执行,所以成员变量a还是默认值,int类型的默认值也就是0;此时父类的构造方法执行完毕,接下来执行子类的构造方法(子类的构造方法是系统默认的无参数的构造方法),这时候a的值才为6,所以,最后程序的输出是0。
你可以建一个Sub引用去接收这个子类对象,然后打印出a,就会输出6;
建一个Super引用去接收这个对象,打印a就可以输出5.
查看完整回答
反对 回复 2018-10-24
  • 2 回答
  • 0 关注
  • 589 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信