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

本文探讨了Java中子类构造方法在创建对象时如何自动调用父类的无参构造方法。无论是哪个子类构造方法,都会默认执行`super();`来调用父类无参构造。这是为了确保在参数列表不一致的情况下,子类仍能正确继承父类。作者强调这种设计符合常理。
摘要由CSDN通过智能技术生成

首先看一下代码:

public class Fu {
    public Fu() {
        System.out.println("父中无参构造方法被调用");
    }

    public Fu(int age) {
        System.out.println("父中带参构造方法被调用");

    }
}
public class Zi extends Fu {

    public Zi() {
        System.out.println("子中无参构造方法被调用");
    }

    public Zi(int age) {
        System.out.println("子中带参构造方法被调用");

    }
}

public class TestDemo {
    public static void main(String[] args) {
        Zi z=new Zi();
        /*父中无参构造方法被调用
          子中无参构造方法被调用*/

        Zi z1=new Zi(2);
        /*
        父中无参构造方法被调用
        子中带参构造方法被调用
         */
    }

}

最终的输出是:

父中无参构造方法被调用
子中无参构造方法被调用
父中无参构造方法被调用
子中带参构造方法被调用

可以发现:
1.子类调用构造方法创建对象,会自动调用父类的无参构造方法。
2.不管子类使用什么构造方法创建对象,都会自动调用父类的无参构造方法。

也就是,父类的带餐构造不会被调用。
这是因为,在子类调用构造方法的时候,默认会执行super();这个语句,这就是去调用父类的无参构造方法。
以上是官方一点的解释。
下面说一下我的理解:
首先,一个父类可以有一个无参构造方法,然后还可以有无数个带参构造方法(当然参数列表要不一样,也就是方法重载的作用),那么同理,子类也可以有一个无参构造方法,也可以有无数个带参数方法,你可以保证一个子类继承父类,但是不能保证子类和父类的带餐构造方法的参数列表保持一致,因为即使参数列表不一致,这两个类也可以构成继承的关系。

所以,由于参数列表不能保持一致,那么子类通过其中一个带参构造方法去创建对象的时候,子类就不知道去默认访问父类的哪个带参构造方法,所以开发Java语言的人就让其默认调用父类的无参构造方法,仔细一想,还是完全符合常理的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值