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

下列程序中age=3放在System前和后运行结果为什么不一样?按父子类初始化顺序运行结果应该是一样的才对啊?

下列程序中age=3放在System前和后运行结果为什么不一样?按父子类初始化顺序运行结果应该是一样的才对啊?

油泼裤带面 2017-11-27 21:51:31
父类程序:package HelloWorldf;public class HelloWorld {public int age=20;public String name;public void show() {    System.out.println("姓名:"+name+"年龄:"+age+"你有会叫的功能");}public HelloWorld() {        System.out.println("年纪:"+age);    age=3;}}子类程序:package HelloWorldf;public class HelloWorldt extends HelloWorld {}测试程序:package HelloWorldf;public class test {    public static void main(String[] args) {        // TODO Auto-generated method stubHelloWorldt two=new HelloWorldt();two.name="dog";two.show();HelloWorld eat=new HelloWorld();    }}运行结果:年纪:20姓名:dog年龄:3你有会叫的功能年纪:20
查看完整描述

1 回答

?
风中打伞的小孩

TA贡献73条经验 获得超20个赞

实例化子类时先调用父类构造函数,

System.out.println("年纪:"+age);//因为属性变量初始值为20,所以输出年纪:20

age=3; System.out.println("年纪:"+age);//此时age已经变成3,自然打印3了

查看完整回答
反对 回复 2017-11-27
  • 油泼裤带面
    油泼裤带面
    额 没看懂,能否帮我理下运行顺序?
  • 风中打伞的小孩
    风中打伞的小孩
    其实,输出结果已经可以告诉我们运行顺序了 这个例子中,先初始化父类属性,有值的赋值(age=20),没值的赋初值(name=null),然后再执行父类构造函数,对这些属性(没赋值的)进行初始化或(赋值的)改变值。 这样说,挺奇怪的,形象得在age=3;后面再打印输出age的值: 年纪:20 年纪:3
  • 1 回答
  • 0 关注
  • 1057 浏览

添加回答

举报

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