继承中构造方法的访问特点

在学习继承时,构造方法的访问规则很多同学还不是很清楚,这里带着大家来理一理思路,对学习的知识进行梳理与巩固。


继承关系中,父子类构造方法的访问特点:
1.子类构造方法当中有一个默认的"super()"调用,所以一定是先调用的父类构造,后执行的子类构造

//父类代码
public class Fu {
    int a;
    int b;

    public Fu(){
        System.out.println("父类构造方法!");
    }
}

=================================================

//子类代码
public class Zi extends Fu {

    public  Zi(){
        System.out.println("子类构造方法!");
    }
}

==================================================

//测试类

public class Demo01Constructor {

    public static void main(String[] args) {
        Zi zi = new Zi();
    }
}

运行结果如下:

 由此可见,当使用无参构造创建子类对象时,会默认优先调用父类的无参构造。

2.子类构造可以通过super关键字来调用父类重载构造。

//父类代码
public class Fu {
    int a;
    int b;

    public Fu(){
        System.out.println("父类构造方法!");
    }

    public Fu(int i) {
        System.out.println("父类重载的构造");
    }
}

=================================================

//子类代码
public class Zi extends Fu {

    public  Zi(){
        super(1);
        System.out.println("子类构造方法!");
    }
}

==================================================

//测试类

public class Demo01Constructor {

    public static void main(String[] args) {
        Zi zi = new Zi();
    }
}

运行结果如下:

 

3.super的父类构造调用,必须是子类构造方法的第一个语句,不能一个子类构造调用多次super构造

如上图,多次调用父类的构造方法会报错。


子类中this的使用:

        在子类中,我们也可以在子类的无参构造中调用子类的有参构造,这时我们可以使用this();来调用本类中其他的方法。

//父类代码
public class Fu {
    int a;
    int b;

    public Fu(){
        System.out.println("父类构造方法!");
    }
}

=================================================

//子类代码
public class Zi extends Fu {

    public  Zi(){
        this(1);
        System.out.println("子类构造方法!");
    }

    public Zi(int a) {
        System.out.println("子类的有参构造");
    }
}

==================================================

//测试类

public class Demo01Constructor {

    public static void main(String[] args) {
        Zi zi = new Zi();
    }
}

运行结果如下:

        

由此可见我们在子类的构造方法中,既可以访问父类的构造方法,也可以访问子类的构造方法,BUT>>>

        super();必须写在构造方法的第一行;

        this也必须写在构造方法的第一行,

当我们把this()放在第一行时,super()就会报错,

        

而当我们把super()放在第一行的时,this()就会报错

所以这两个不可以同时出现,只能写一个,不然代码就会报格式错误!!!

 



总结:
        子类必须调用父类构造方法,不写则赠送super();

        写了则用写的指定的super调用;

        super只能有一个,还必须是第一个;

        this也只能是第一个,所以super()和this()不可以同时出现

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值