构造函数中 super() 的存在是可选的吗?
在面向对象编程中,在派生类中使用构造函数是常见的做法在其超类中调用构造函数。然而,一些开发人员质疑在构造函数中显式指定 super() 的必要性。
编译器自动调用 super()
Java 编译器自动插入对如果子类构造函数未指定超类构造函数,则可访问超类的无参数构造函数。这意味着在大多数情况下,省略 super() 不会影响程序的行为。
规则的例外
但是,也有一些情况需要显式调用 super() 的情况:
存在参数时的构造函数用法
当子类构造函数有参数,子类构造函数有责任将适当的参数传递给超类构造函数。除非明确指定,否则编译器不会自动调用带有参数的超类构造函数。
示例
考虑以下代码:
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