继承后的构造器特点

本文探讨了Java中子类继承父类后构造器的工作原理,强调子类构造器首先调用父类无参构造器的重要性,这是为了确保父类的数据在子类初始化前得到正确初始化。当父类只有有参构造器时,子类必须通过`super()`显式调用来完成初始化。通过实例代码展示了这一过程,并建议在编写构造器时提供无参和有参构造器以提高代码的健壮性。
摘要由CSDN通过智能技术生成

子类继承父类后构造器的特点:

子类中有的构造器默认都会先访问父类中无参的构造器,再执行自己。

为什么?

- 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。
- 子类初始化之前,一定要调用父类构造器先完成父类数据空间的初始化。

package com.exts.consts;

public class Main {
    public static void main(String[] args) {
        SO so = new SO();
        System.out.println("---------");
        SO sp = new SO();
    }
}
package com.exts.consts;

public class Fa {
    public Fa() {
        System.out.println("父级无参构造器");
    }
    public Fa(int a){
        System.out.println("父级有参构造器");
    }
}
package com.exts.consts;

public class SO extends Fa{
    public SO() {
        System.out.println("子类无参构造器");
    }

    public SO(int a) {
        super(a);
        System.out.println("子类有参构造器");
    }
}
Main方法运行结果:

父级无参构造器
子类无参构造器
---------
父级无参构造器
子类无参构造器

super调用父类有参数构造器的作用:

        初始化继承自父类的数据。

        您可能已经发现在上面我们演示子类调用父级有参构造器时用到了super()函数来传递参数,这在我们的实际开发中也是经常会遇到的方法,在子类的有参数构造器当中通过super()作为桥梁向父类的有参构造器传递参数就可以直接向父类传递参数。

        而子类优先加载父类构造器的特性可以使得在调用自己的构造器之前就完成参数的传递,可以起到类似初始化的效果。

        我们可以通过下面的代码演示来增加了解:

Main(){
    Son S = new Son(1,1);
}

Son extends Father{
    public Son(int a, int b){
        super(a,b);
    }
}
Father{
    int value1;
    int value2;
    public Father(int f, int g){
        this.value1 = f;
        this.value2 = g;
    }
}

如果父类中没有无参数构造器,只有有参构造器,会出现什么现象呢?
●会报错。因为子类默认是调用父类无参构造器的。
如何解决?
●子类构造器中可以通过书写supr(..).手动调用父类的有参数构造器,或者写出来

基于上面的问题所以我们建议写构造器时最好无参构造器和有参构造器(如果有)都写出来会比较好。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值