首页 > Java > java教程 > Java子类总是需要显式调用超类构造函数吗?

Java子类总是需要显式调用超类构造函数吗?

Mary-Kate Olsen
发布: 2024-10-31 02:50:02
原创
1011 人浏览过

Do Java Subclasses Always Need to Explicitly Call the Superclass Constructor?

必须在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板