首页  >  文章  >  Java  >  你应该总是在构造函数中使用“super()”吗?

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

Barbara Streisand
Barbara Streisand原创
2024-11-02 12:30:30585浏览

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

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

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

编译器自动调用 super()

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

规则的例外

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

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

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

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

示例

考虑以下代码:

<code class="java">public class Base {
    private Base() {}
}

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

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

以上是你应该总是在构造函数中使用“super()”吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn