子类构造时父类必须先初始化,Java默认插入super()调用父类无参构造;若父类无无参构造,需显式调用super(参数)、补充无参构造或用this()间接调用;同名成员变量访问遵循就近原则,父类需super.name;抽象类构造方法用于初始化共用资源,子类继承时仍须先执行。

子类构造时,父类必须先完成初始化
子类对象创建过程中,父类的数据必须先就位。这是因为子类会用到继承来的字段和方法,而这些内容依赖于父类状态的正确建立。所以 Java 规定:每个子类构造方法的第一条语句,默认就是 super()(调用父类无参构造)。哪怕你没写,编译器也会自动补上。
父类没有无参构造时的三种应对方式
当父类只提供带参构造、没写无参构造时,子类不能靠默认 super() 完成调用,必须显式处理。常见做法有:
- 在父类中补充一个 public 无参构造(最直接)
- 子类构造方法首行写 super(参数),明确调用父类某个带参构造
- 子类构造方法首行写 this(...) 调用本类另一个构造,但那个构造仍需最终调用 super(...)
成员变量同名时的访问优先级
如果子类定义了和父类同名的成员变量(比如都叫 name),在子类中直接写 name 访问的是子类自己的;要访问父类的,必须写 super.name。这不是覆盖,而是隐藏——父类变量依然存在,只是被遮住了。
抽象类中的构造逻辑不变
抽象类不能 new 实例,但它照样可以有构造方法,而且子类继承它时,构造流程完全一致:先执行抽象父类的构造(哪怕它是 abstract),再执行子类构造。它的构造方法通常用于初始化共用资源、校验参数或设置模板状态,是子类安全构建的重要一环。

















