java构造方法链需显式用super()调用父类构造器且必须为首句;父类无无参构造器时子类必须匹配调用super(参数);参数可加工后再传递;this()与super()互斥且均须首行。

Java 中构造方法链在继承体系中传递参数,核心是通过 super() 显式调用父类构造方法,并将子类构造器接收到的参数“转发”给父类构造器。这个过程不是自动的,必须由开发者显式编写,且只能出现在子类构造方法的第一行。
必须显式调用 super() 传递参数
子类默认不会自动把参数传给父类构造方法。如果父类没有无参构造器,而子类构造方法又没写 super(...),编译会直接报错。
- 父类有无参构造器 → 子类可不写 super(),系统自动插入 super()
- 父类只有带参构造器 → 子类每个构造方法都必须以 super(参数) 开头,且参数类型、数量要匹配
参数可以经过加工后再传递
子类构造方法拿到参数后,不一定要原样传给父类。可以做转换、拼接、默认值填充等处理,再传给 super()。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 例如:子类接收一个字符串 name,父类需要的是 Person(String firstName, String lastName),子类可拆分 name 后再调用 super(firstName, lastName)
- 也可以补充默认值:super(name, "Unknown", 0),把部分参数设为固定值
构造链是单向且严格的:从子类到父类
Java 只允许向上(父类方向)调用构造方法,不能反向;而且 super() 必须是第一句,不能放在条件分支或 try 块里。
- 错误写法:if (x > 0) super(x); —— 编译失败
- 正确做法:先计算好参数,再统一调用 super(computedValue)
- 多个重载构造器之间可用 this(...) 调用,但最终仍需落到一个调用 super(...) 的构造器上
常见陷阱:this() 和 super() 不能共存
一个构造方法里,要么调用 this(...)(本类其他构造器),要么调用 super(...)(父类构造器),二者互斥,且都必须是第一行。
- 想复用逻辑?把公共初始化代码提取成 private 方法,在 super() 后调用
- 避免在 super() 前执行可能抛异常或依赖未初始化字段的操作
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










