class SuperServer
{
public SuperServer(){
System.out.println(" all ");
}
public SuperServer(int y){
this();
System.out.println(" good ");
}
};class TestServer extends SuperServer
{
public TestServer(int y){
System.out.println(" things ");
}
public TestServer(){
super(10);
System.out.println(" come ");
}
public static void main(String [] args){
TestServer ts = new TestServer();
}
};以上这段程序调试输出为:all
                        good
                        come但我认为少一个 all
我是这样理解的:首先执行TestServer的父类SuperServer的无参构造函数,输出一个 all
然后,执行TestServer的无参构造函数,其中通过调用super(10),再次调用父类的带参构造函数,其中 this() 在输出一个 all,然后输出 good 最后,输出 come请高手指出我的错误,谢谢!

解决方案 »

  1.   

    如果构造函数中包含super(...),那么它将作为初始化父类所使用的构造函数
    并且super只能放在构造函数第一行
      

  2.   

    如果子类的构造函数中没有super(),就先调用父类的构造函数,然后才是子类的构造函数,
    如果子类的构造函数中出现super(),就通过super调用父类的构造函数(只调用父类构造函数这一次),然后才是子类的构造函数,这样理解,对不?
      

  3.   

    子类必须调用父类的构造方法,并且要放在子类构造方法的第一句。如果你的子类第一句不是super()或super(参数),系统会自动加上super()来调用的。
      

  4.   

    this();会执行父类的无参构造函数
      

  5.   

    super(10);
    调用的父类的有参构造函数
    然后以遇到this();再调用父类无参构造函数