没有继承的类的构造函数中的super()

时间:2017-06-04 09:15:46

标签: java inheritance

我在Java视频教程中看到的以下代码(类的缩写版本)。

public class Address {
    private String firstName;
    private String lastName;

    public Address() {
        super();
    }

    public Address(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    ...
}

此处显示的类没有extend个关键字。尽管如此,super()在没有参数的构造函数中使用。

它调用Object类的构造函数?我是对的吗?

但为什么呢?

拨打super()

的原因是什么?

2 个答案:

答案 0 :(得分:4)

这是你让IDE自动生成你的类的构造函数时所得到的...因为该类没有扩展任何东西,所以调用super与调用对象类的构造函数相同,实际上没有任何影响在Address类实现

所以在你的情况下

public Address() {
    super();
}

相同
public Address() {

}

答案 1 :(得分:3)

创建类的实例时,将调用超类的构造函数。如果您的类明确地扩展,有两个选项:

  • 如果超类有默认构造函数,则调用它;
  • 如果没有默认构造函数,您应该指定调用哪个构造函数并为其发送相应的参数。

调用不带参数的super()基本上意味着您调用默认构造函数。这没有必要,因为即使你没有明确地这样做,它也会被调用。

由于java中的所有对象都隐式扩展了Object,因此在创建类的实例时始终会调用Object的默认构造函数。 super()只是让它显而易见。但是,为什么我们应该对已经很清楚的事情加上明确性。

此外,当您使用代码生成工具(例如Eclipse)时,IDE有时会添加它。

你可以阅读关于类/超类的consturtors如何在OCA准备的书中工作的非常好的描述:https://www.amazon.com/OCA-Certified-Associate-Programmer-1Z0-808/dp/1118957407