new 一个对象时候,先在堆上开辟一块空间,并清0. 此时Zi的num是0然后基类构造器被调用,因此此时zi的num仍然是0,所有会有一个 0基类构造器完成之后,实例变量初始化,这时zi的nun初始化为111最后 子类构造器执行。
Fu f = new Fu();这句代码的执行过程: 先初始化num的值为10,然后再执行构造器所以输出的num是10Fu f2 = new Zi(); 这句代码的执行过程稍微复杂些,因为涉及继承: 当然是先构造父类子对象,但是此时num还没有初始化,所以输出的num为0 然后再构造子类对象,此过程先初始化num为111,然后执行构造函数,输出num为111另外,你若想弄清楚对象创建过程这样的原理性问题,强烈建议你看看《Java编程思想》这本书,就你提的这个问题上面阐述的很清楚的
为什么结果中间有个 num = 0; ???
先初始化num的值为10,然后再执行构造器所以输出的num是10Fu f2 = new Zi();
这句代码的执行过程稍微复杂些,因为涉及继承:
当然是先构造父类子对象,但是此时num还没有初始化,所以输出的num为0
然后再构造子类对象,此过程先初始化num为111,然后执行构造函数,输出num为111另外,你若想弄清楚对象创建过程这样的原理性问题,强烈建议你看看《Java编程思想》这本书,就你提的这个问题上面阐述的很清楚的