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请高手指出我的错误,谢谢!
{
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请高手指出我的错误,谢谢!
并且super只能放在构造函数第一行
如果子类的构造函数中出现super(),就通过super调用父类的构造函数(只调用父类构造函数这一次),然后才是子类的构造函数,这样理解,对不?
调用的父类的有参构造函数
然后以遇到this();再调用父类无参构造函数