今天我同学问我一个问题,我在这里和大家分享一下自己的理解,不对的地方请大家多指教- class X
- {
- Y b=new Y();
- X(){
- System.out.print("X");
- }
- }
- class Y
- {
- Y(){
- System.out.print("Y");
- }
- }
- public class Demo extends X
- {
- Demo(){
- System.out.print("Z");
- }
- Y y=new Y();
- public static void main(String[] args){
- new Demo();
- }
- }
复制代码
在这里,子类继承父类,当new 一个子类时候,因为子类Demo继承父类X所以子类在加载到堆中时候会为父类留一段空间,先进行的是父类X的成员变量初始化Y b=new Y();所以Y加载到堆中,调用Y的空参构造,先打印了一个Y,父类X成员变量Y b=new Y();初始化完毕,会有个super直接指向父类X的方法区,因为子类调用的是父类的空参构造所以打印一个X,子类Demo再进行成员变量的初始化,然后是Y y=new Y();进行初始化,又为Y开辟一个空间,调用Y的空参构造,有打印了Y,然后执行到Demo的空参构造输出语句。 |