1. 子类构造函数可以显示调用父类构造函数,可以选择调用父类的缺省构造函数(无参构造函数),也可以调用父类的有参构造函数。
2. 子类构造函数可以不显式调用父类构造函数,这时父类的缺省构造函数将会被调用,可以成为隐式调用。
3. 总之,子类的构造函数必须得调用父类的构造函数。
4. 类中可以不显示定义构造函数,默认有一个缺省的无参构造函数。
5. 如果显示定义了有参构造函数,缺省的无参构造将不生效。
6. 父类如果只定义了有参构造,子类将不能显式或隐式调用父类的无参构造,因为父类已经不存在无参构造。
package indi.tom.test.indi.tom;
/**
* @Author Tom
* @Date 2019/11/8 22:25
* @Version 1.0
* @Description
*/
public class Test01 extends Test02{
private String a;
public Test01(){
//显示调用父类有参构造
super("test");
System.out.println("Test01 constructor without arguments is called");
}
public Test01(String a){
//隐式调用父类无参构造,此处如果写super(),效果也是一样的
//super();
System.out.println("Test01 constructor with arguments is called");
}
public static void main(String[] args) {
new Test01();
new Test01("aa");
}
}
class Test02{
private String name;
public Test02(){
System.out.println("Test02 constructor without arguments is called");
}
public Test02(String name){
System.out.println("Test02 constructor with arguments is called");
}
}
-------
Test02 constructor with arguments is called
Test01 constructor without arguments is called
Test02 constructor without arguments is called
Test01 constructor with arguments is called