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

标签 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() 的原因是什么?

最佳答案

当您创建类的实例时,将调用父类(super class)的构造函数。如果您的类(class)显式扩展某事,则有两种选择:

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

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

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

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

您可以在 OCA 准备书中阅读关于类/父类(super class)的构造函数如何工作的非常好的描述:https://www.amazon.com/OCA-Certified-Associate-Programmer-1Z0-808/dp/1118957407

关于java - 没有继承的类的构造函数中的 super(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44352505/

相关文章:

java - 如何将 swing jButton 上的文本字体大小设置为适合 jButton 的最大大小

java - 从java中的char数组和字节数组中提取特定字节

java - 使用 Spring Data Rest 从自定义 JpaRepository 方法返回投影列表

java - 连接可扩展字符串和字符串

java - 构造函数是否未绑定(bind)到类的实例?

asp.net - NHibernate 继承类但无需持久化

java - 为什么签名指定接口(interface)时会调用父类(super class)方法?

objective-c - 强制子类覆盖方法

delphi - Delphi 7继承

c++ - 如何防止从字符串派生的 2 个类之间的交叉分配