当子类想继承父类时,父类必须有无参的构造方法,如果不主动添加系统会默认添加一个无参的构造方法,此时子类可以顺利继承父类
但是当父类添加了一个带参的构造方法时,此时系统将不会再默认添加无参的构造方法,所以此时必须自己手动添加一个无参的构造方法,这样才能保证被子类顺利的继承
在实例化子类的时候会自动的实例化父类,如果此时的父类还继承了其他的类,那么便会逐级的向上查询,知道找到顶级的父类,然后开始逐个的实例化,在实例化的同时
便会自动调用无参的构造方法,但是如果想要调用父类的带参的构造方法,此时就必须通过super(i)进行调用
public class Father {
//年龄
private int age;
//仅有一个带参数的构造方法
public Father (int i){
this.age = i;
System.out.println("实例化父类 ag = " + age);
}
public Father() {
System.out.println("这是父类的无参的构造方法");
// TODO Auto-generated constructor stub
}
//main方法
public static void main (String [] args) {
//实例化对象时必须指定参数以运行对应的构造方法实例(构造)对象
Father fa = new Father(40);
Father fa1 = new Father(50);
Father fa2 =new Father();
}
}
实例化父类 ag = 40
实例化父类 ag = 50
这是父类的无参的构造方法
public class Son extends Father{
private int age;
//子类构造方法——必须先显式调用父类构造方法
public Son(int i) {
super(i);//必须先调用父类的构造方法,然后才能写子类构造方法的其他逻辑 可以注释掉这句看运行结果
this.age = i - 20;
System.out.println("实例化子类 age = " + age);
}
public Son() {
super(); //可以注释掉这句然后看运行结果
System.out.println("这是子类的无参构造方法");
}
//main方法
public static void main (String [] args) {
//实例化子类Son
Son so = new Son(40);
Son so1 = new Son(50);
Son so2 =new Son();
}
}
实例化父类 ag = 40
实例化子类 age = 20
实例化父类 ag = 50
实例化子类 age = 30
这是父类的无参的构造方法
转载自https://blog.csdn.net/lzh_86/article/details/78187379