继承中构造方法的关系
1、子类中所有的构造方法默认都会访问父类中无参构造方法
2、为什么呢?
因为子类会继承父类的数据,可能还会使用父类的数据
所以在初始化子类之前,一定会先完成父类的初始化
class Father5{
int age;
public Father5(){
System.out.println("父类的无参构造方法");
}
public Father5(String name){
System.out.println("这是父类中有参构造方法");
}
}
class Son5 extends Father5{
public Son5(){
super();
System.out.println("这是子类的无参构造方法");
}
public Son5(String name){
super();
System.out.println("这是子类中有参构造方法");
}
}
public class ExtendsDemo7 {
public static void main(String[] args) {
Son5 s = new Son5();
}
}
那么当父类没有提供无参构造方法的时候,怎么办呢?会出现什么情况?
无法创建子类对象
怎么解决?
1、在父类中加一个无参构造
2、使用super关键字去调用父类中带参数的构造方法 super(…)
3、子类通过调用本类其他的构造方法
使用this关键字间接的调用super去访问父类的构造方法
紧遵循一句话:要想初始化子类,就必须先初始化父类(也就是调用父类的构造方法)
注意事项:
1、super(…)和this(…)必须出现在构造方法的第一条语句上
2、在Java中不允许对一个进行多次初始化,
如果调用了多次super,相当于调用多次父类构造方法,就是对父类数据进行多次初始化
每个类只能初始化一次
class Father6{
int age;
public Father6(){
System.out.println("这是父类中无参构造方法");
}
public Father6(String name){
System.out.println("父类的有参构造");
}
}
class Son6 extends Father6{
public Son6(){
// this("随便给");
super("随便给");
// super();
System.out.println("子类的无参构造方法");
// this("随便给");
}
public Son6(String name){
super("随便给");
System.out.println("子类的带参数的构造方法");
}
}
public class ExtendsDemo8 {
public static void main(String[] args) {
Son6 s = new Son6();
}
}