Java 中继承关系下子类怎样访问父类的构造方法

作者:袖梨 2026-07-02
子类不能直接访问父类构造方法,但必须显式或隐式调用以完成初始化;默认插入super()调用父类无参构造,若父类无此类构造则需显式super(...)且必须为首句;构造方法不可继承、重写或直接调用。

子类不能直接“访问”父类的构造方法,但必须通过 显式或隐式调用 父类构造方法来完成自身实例化。这是 Java 对象初始化的强制规则:每个子类构造方法执行时,都必须确保父类部分被正确初始化。

子类构造方法默认调用父类无参构造方法

如果子类构造方法中没有写 super(...),编译器会自动在第一行插入 super() —— 即调用父类的无参构造方法。

  • 前提是父类存在**可访问的无参构造方法**(默认提供或显式定义);
  • 如果父类只定义了带参构造方法、且没有无参构造,而子类又没写 super(...),编译会报错:“找不到合适的构造器”;
  • 例如:父类只有 public Parent(String name),子类构造方法未调用 super(name),就会编译失败。

子类需用 super() 显式调用父类指定构造方法

当父类没有无参构造,或你想初始化父类特定状态时,必须在子类构造方法的第一行写 super(...),参数需匹配父类某个构造方法签名。

  • super() 必须是子类构造方法中的第一条语句;
  • 只能出现一次,且不能和 this(...)(调用本类其他构造)共存;
  • 例如:super("defaultName", 18); 调用父类 Parent(String, int) 构造方法。

父类构造方法本身不可继承、不可重写、不可直接调用

构造方法不是普通成员方法,它不参与继承机制:

立即学习“Java免费学习笔记(深入)”;

  • 子类不会“继承”父类的构造方法;
  • 不能用 parentInstance.super(...) 或类似语法调用;
  • 也不能用 @Override 修饰构造方法 —— 它根本不是可覆盖的方法。

常见误区提醒

容易混淆的几个点:

  • 误以为 super 是调用“父类构造方法对象”,其实它是触发父类构造逻辑的指令;
  • 误在构造方法中间或后面写 super(...) —— 编译直接拒绝;
  • 误把 super() 当成普通方法调用,试图多次或条件调用 —— 语法不允许。

相关文章

精彩推荐