JavaSe之继承中构造方法的关系

继承中构造方法的关系
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();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值