public class Constructor {
Constructor() {
System.out.println("this is the Constructor!");
}
public static void main(String[] args){
new Constructor();
new Constructor2("good");
}
}class Constructor2 extends Constructor {
Constructor2(String s) {
System.out.println("Constructor overrided!" + s);
}
}
为什么输出2次 “this is the Constructor!”?菜鸟问题,请各位不吝赐教!
Constructor() {
System.out.println("this is the Constructor!");
}
public static void main(String[] args){
new Constructor();
new Constructor2("good");
}
}class Constructor2 extends Constructor {
Constructor2(String s) {
System.out.println("Constructor overrided!" + s);
}
}
为什么输出2次 “this is the Constructor!”?菜鸟问题,请各位不吝赐教!
这句实力化父类对象,调用构造方法1次
new Constructor2("good");
这句实力化子类对象,在调用子类构造方法前,首先调用父类构造方法,2次。
输出:this is the Constructor!运行:new Constructor2("good");
输出:this is the Constructor!
Constructor overrided!good先运行父类的构造函数,在运行子类的构造函数。
请问,是因为override了,所以先调用父类构造函数,还是所有子类都必须先调用父类构造函数?
感谢解答!
new Constructor();
这句实力化父类对象,调用构造方法1次
new Constructor2("good");
这句实力化子类对象,在调用子类构造方法前,首先调用父类构造方法,2次。
1,分配成员变量的内存空间并进行默认初始化;
2,调用对象的构造函数,并绑定构造函数的参数;
3,如果构造函数中存在this()调用,则调用相应重载的构造函数
4,重载的构造函数执行完毕后,隐式或者显式的调用父类的构造函数.