先总结:
1. 构造函数创建规则
a. 当类中没有构造函数,默认会自动创建一个无参构造函数(隐式)。
b. 当类中有 有参 构造函数,则不会创建无参构造函数。
2. 创建子类的对象,一定会调用父类的构造函数(无参或有参)。
a. 情况一:当父类有无参构造函数,子类构造函数可写super(),也可不写。
b. 情况二:当父类只有有参构造函数,则不会自动生成无参构造函数。子类的构造函数必须加上super(参数);
3. 为什么一定会调用父类的构造函数(无参或有参)。
a. 因为子类继承父类之后,获取到了父类的内容(属性/字段),而这些内容在使用之前必须先初始化,
所以必须先调用父类的构造函数进行内容的初始化
一.创建子类一定会调用父类的构造函数
package JavaSE;
public class Parent {
public Parent(){
System.out.println("我是父类的无参构造函数");
}
public Parent(int a){
System.out.println("我是父类的有参构造函数");
}
}
class Son extends Parent{
public Son(){
System.out.println("我是子类的无参构造函数");
}
public Son(int a){
System.out.println("我是子类的有参构造函数");
}
public static void main(String[] args) {
//Son son = new Son(); //运行结果:我是父类的无参构造函数 我是子类的无参构造函数
//Son son = new Son(1); //运行结果:我是父类的无参构造函数 我是子类的有参构造函数
}
}
二.父类没有无参构造函数,子类一定得显示写上super(参数),否则报错
上图报错
上图运行结果:
我是父类的有参构造函数
我是子类的有参构造函数