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!”?菜鸟问题,请各位不吝赐教!

解决方案 »

  1.   

    new Constructor(); 
    这句实力化父类对象,调用构造方法1次
    new Constructor2("good"); 
    这句实力化子类对象,在调用子类构造方法前,首先调用父类构造方法,2次。
      

  2.   

    运行:new Constructor();
    输出:this is the Constructor!运行:new Constructor2("good");
    输出:this is the Constructor!
          Constructor overrided!good先运行父类的构造函数,在运行子类的构造函数。
      

  3.   

    “这句实力化子类对象,在调用子类构造方法前,首先调用父类构造方法,2次”
    请问,是因为override了,所以先调用父类构造函数,还是所有子类都必须先调用父类构造函数?
    感谢解答!
      

  4.   


    new Constructor();  
    这句实力化父类对象,调用构造方法1次 
    new Constructor2("good");  
    这句实力化子类对象,在调用子类构造方法前,首先调用父类构造方法,2次。 
      

  5.   

    总结一下楼上各位的,子类对象的构造和初始化过程:
        1,分配成员变量的内存空间并进行默认初始化;
        2,调用对象的构造函数,并绑定构造函数的参数;
        3,如果构造函数中存在this()调用,则调用相应重载的构造函数
        4,重载的构造函数执行完毕后,隐式或者显式的调用父类的构造函数.