Chess y = new Chess("The end.")
1、调用父类的构造方法
BoardGame();
System.out.println("Haha,let's begin:"); //Haha,let's begin:
pp(); //子类重写了父类的方法,调用  System.out.println("pp 2"+"m = "+m); ,此时子类的m还没有初始化 //pp 2m = 0
System.out.println("m = "+m); // 父类的m,初始化了,// m = 100
2、调用子类的构造方法
System.out.println(ss); // The End.

解决方案 »

  1.   

    在创建对象时,对象所在类的所有数据成员会首先进行初始化,如果其中的成员变量有对象,
    那么它们也会按照顺序执行初始化工作。在所有类成员初始化完成后,才调用对象所在类的构造方
    法创建对象。构造方法作用就是初始化。
    静态对象(变量)在非静态对象前初始化。静态对象(变量)只初始化一次,再次调用就不初
    始化了,但非静态对象在每次调用时都要初始化。
    程序中的主类的静态变量会在main()方法执行前进行初始化工作。
    不仅第1 次创建对象时,类中所有的静态变量要初始化,第1 次访问类中的静态变量(没有创
    建对象)时,该类中所有的静态变量也要按照它们在类中排列的顺序初始化。
    初始化的顺序包括构造方法调用的顺序如下:
    1. 主类的静态成员首先初始化。
    2. 主类的超类的构造方法按照从最高到最低的顺序被调用。
    3. 主类的非静态对象(变量)初始化。
    4. 调用主类的构造方法。
    在一个构造方法中只能调用一次其它的构造方法,并且调用构造方法的语句必须是第一条语句。
      

  2.   

    谢谢weimenren(愚人码头)的回答,那么子类的m和父类的m会占有两个不同的存储空间吗?
      

  3.   

    那不是说执行:
        Chess y = new Chess("The End.");
    就好像变成了:
        Chess y = new BoardGame();
        y = new Chess("The End.");不解!明明用了Chess的带参构造为什么变成了先调用BoardGame无参构造然后再调用Chess的带参构造,难道要这样理解:在Chess y的时候就开始构造,然后将new Chess("The End.")赋值给y.请weimenren(愚人码头)解困,谢谢