这篇文章总结了关于Java构造函数常见问题。
1.为什么创建子类对象需要调用父类构造函数?
class Super {
String s;
public Super(){
System.out.println("Super");
}
}
public class Sub extends Super {
public Sub(){
System.out.println("Sub");
}
public static void main(String[] args){
Sub s = new Sub();
}
}
打印:
Super
Sub
当从另外一个类继承时候,super()必须首先在构造函数中调用。 如果没有,编译器将插入该调用。 这就是为什么在创建子对象时也调用超级构造函数的原因。
这不会创建两个对象,只有一个子对象。 有超级构造函数调用的原因是,如果超类可以有私有字段,需要通过其构造函数初始化。
编译器插入超级构造函数后,子类构造函数如下所示:
public Sub(){
super();
System.out.println("Sub");
}