”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 你应该总是在构造函数中使用“super()”吗?

你应该总是在构造函数中使用“super()”吗?

发布于2024-11-25
浏览:636

Should You Always Use `super()` in Constructors?

构造函数中 super() 的存在是可选的吗?

在面向对象编程中,在派生类中使用构造函数是常见的做法在其超类中调用构造函数。然而,一些开发人员质疑在构造函数中显式指定 super() 的必要性。

编译器自动调用 super()

Java 编译器自动插入对如果子类构造函数未指定超类构造函数,则可访问超类的无参数构造函数。这意味着在大多数情况下,省略 super() 不会影响程序的行为。

规则的例外

但是,也有一些情况需要显式调用 super() 的情况:

  • 如果超类没有可访问的无参数构造函数。
  • 如果子类构造函数有参数,并且超类有一个接受参数的构造函数。
  • 如果子类构造函数需要调用超类中除默认无参数之外的特定构造函数constructor.

存在参数时的构造函数用法

当子类构造函数有参数,子类构造函数有责任将适当的参数传递给超类构造函数。除非明确指定,否则编译器不会自动调用带有参数的超类构造函数。

示例

考虑以下代码:

public class Base {
    private Base() {}
}

public class Derived extends Base {
    public Derived(int i) {
        super(); // Call the default no-args constructor of Base
    }
}

在此示例中,派生构造函数中的 super() 调用至关重要,因为 Base 有一个私有的无参数构造函数。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3