必须在 Java 子类中显式调用超类构造函数吗?
定义子类时,常见的做法是看到显式调用超类构造函数使用 super() 的超类构造函数。然而,有人可能会问这是否有必要。
super() 是编译器自动添加的吗?
是的,如果子类构造函数省略了对超类的调用构造函数时,编译器会自动调用超类中可访问的无参构造函数(no-args constructor)。此默认行为称为构造函数链接。
构造函数的类型
何时是 super( ) 必需吗?
只有在以下情况下才需要显式使用 super():
示例 1:
<code class="java">public class Base {} public class Derived extends Base {}</code>
否需要显式调用 super(),因为 Base 有一个默认构造函数。
示例 2:
<code class="java">public class Base { public Base(int i) {} } public class Derived extends Base { public Derived(int i) { super(i); // Explicitly call the Base(int) constructor } }</code>
在这种情况下,需要 super(i),因为超类没有无参构造函数,子类构造函数需要为其 i 参数提供初始值。
通过理解这些概念,您可以避免不必要的 super() 调用并确保正确的构造函数链接在你的子类中。
以上是Java子类总是需要显式调用超类构造函数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!