Java子类自动调用父类无参构造函数

Java子类自动调用父类无参构造函数

今天在刷题的时候看到一道题:

public class A {
    public A() {//父类A的无参构造函数
        System.out.println("A");
    }
}
public class B extends A{
    public B() {//子类B的无参构造函数
        System.out.println("B");
    }
}
public class TestAB {
    public static void main(String[] args) {
        A a = new A();//创建一个A类对象
        B b = new B();//创建一个B类对象
    }
}

问题是输出的结果是什么,我下意识觉得太简单了,这不就是AB嘛,创建一个A类对象时去调用A的无参构造函数,输出A;创建一个B类对象时去调用B的无参构造函数,由于我下意识地认为子类B的无参构造函数没有super(),我就认为它不会去调用父类A的无参构造函数,所以我的结果是B。
当然我错了,结果是AAB。
在这里插入图片描述

下面的例子可以说明这个问题:

public class A {
    public A(int a) {
        System.out.println("A");
    }
}
public class B extends A{
    public B() {
        System.out.println("B");
    }
}
public class TestAB {
    public static void main(String[] args) {
        A a = new A(1);
        B b = new B();
    }
}

结果是:
在这里插入图片描述原因就是在去创建子类对象时,它自动去调用父类的无参构造函数,由于A类只有一个有参构造函数,所以没有找到,编译错误。
当我们在子类中使用super(XXX),去调用父类有参构造函数就可以解决。
代码如下:

public class B extends A{
    public B() {
        super(1);
        System.out.println("B");
    }
}

从这里我们还应该能看出,当我们在一个类中定义了自己的带参数的构造方法的时候,必须把无参构造函数定义一下。用我们老师的话来说就是:不管什么时候,不管能不能用到,先把无参构造函数写出来,避免出错。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妄念ol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值