1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java子类自动调用父类无参构造函数

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

时间:2021-09-08 09:32:51

相关推荐

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");}}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。