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

mic*_*ech 5 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;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

那里显示的类没有extend关键字。然而,super()在构造函数中使用时不带参数。

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

但为什么?

接到这个电话的原因是什么super()

dve*_*opp 4

当您创建类的实例时,将调用超类的构造函数。如果您的类显式扩展了某些内容,则有两种选择:

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

调用不带参数的 super() 基本上意味着您调用默认构造函数。这不是必需的,因为即使您没有显式执行它也会被调用。

由于java中的所有对象都隐式扩展了Object,因此每次创建该类的实例时都会调用Object的默认构造函数。super() 只是让它变得明确。但是,为什么我们要为已经很清楚的事情添加明确性呢?

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

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