构造函数中 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中文网其他相关文章!