父类:
public class FatherCalss { public FatherCalss(){
System.out.println("FatherCalss Create");
}
}
子类:继承了父类public class ChildClass extends FatherCalss { public ChildClass(){
System.out.println("ChildClass Create");
}
}
答案是:
FatherCalss Create
FatherCalss Create
ChildClass Create问题:为什么父类的FatherCalss Create打印出了两次
public class FatherCalss { public FatherCalss(){
System.out.println("FatherCalss Create");
}
}
子类:继承了父类public class ChildClass extends FatherCalss { public ChildClass(){
System.out.println("ChildClass Create");
}
}
答案是:
FatherCalss Create
FatherCalss Create
ChildClass Create问题:为什么父类的FatherCalss Create打印出了两次
public static void main(String[] args) {
FatherCalss fc=new FatherCalss();
ChildClass cc=new ChildClass();
}
}
”已经打印了“FatherCalss Create
”,
还有的是你创建子类对象的时候,默认先调用父类的构造器,(如果你没有显示设置有参数的构造函数)
class FatherCalss { public FatherCalss() {
System.out.println("先调用父类的构造方法");
System.out.println("FatherCalss Create");
}
}class ChildClass extends FatherCalss{ public ChildClass() {
System.out.println("再调用子类的构造方法");
System.out.println("ChildClass Create");
}
}public class Hello {
public static void main(String[] args) {
FatherCalss fc = new FatherCalss();
ChildClass cc = new ChildClass();
}
}运行结果:先调用父类的构造方法
FatherCalss Create
先调用父类的构造方法
FatherCalss Create
再调用子类的构造方法
ChildClass Create有运行结果可以看出,调用了两次父类的构造方法,说明在new父类对象的时候调用了一次父类的构造方法,在new子类对象的时候,先调用了父类的构造方法,再调用自身的构造方法!
因为ChildClass 是FatherClass 的子类, 子类在调用构造方法的时候,会先去调用父类的无参数的构造方法,这个时候就会再打印一行FatherCalss Create 最后实例化自己的对象时,打印ChildClass Create
1.首先调用父类的构造方法,打印出东西,无可厚非;
2.其次调用子类的构造方法,子类构造方法中,首先默认要做的事为: super(),即调用父类的无参构造方法,然后再打印出你子类的内容。
package extend;public class ChildClass extends FatherClass{
ChildClass(){
System.out.println("子类无参构造方法");
}
ChildClass(int i){
System.out.println("子类有参构造方法,参数i:"+this.i);
}
/**
* @param args
*/
public static void main(String[] args) {
new ChildClass();
new ChildClass(1);
}}class FatherClass{
int i;
FatherClass(){
System.out.println("父类无参构造");
}
FatherClass(int i){
System.out.println("父类有参构造方法,参数i:"+i);
}
}
这个《Thinking in Java》里有解说的,JAVA的构造是上溯构造当你new Child()的时候,是先调用父类的构造,再调用子类的构造