重写方法时应明确意图并合理调用super:增强逻辑放开头、前置校验放前面、包裹流程放中间;避免断链错误;用私有字段保障状态安全;静态与实例方法均支持super调用。

重写方法时保留父类逻辑,核心不是“加不加 super”,而是清楚什么时候该调用、怎么调用、调用后如何衔接自己的逻辑。
明确重写意图:增强、前置还是后置?
不同目的对应不同 super 调用位置:
- 若想在父类行为基础上追加动作(比如日志、通知),把 super.method() 放在方法开头或中间,再写子类逻辑
- 若需先校验或准备资源(如权限检查、参数预处理),把子类逻辑放前面,super.method() 放后面
- 若要包裹整个流程(比如加 try/catch 或计时),用 super.method() 包在子类代码块内,像一层壳
避免常见断链错误
有些写法看似调用了 super,实际已切断原有流程:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
- 别在 super() 前访问 this —— 构造器里必须第一行 super(),否则报错
- 别在 super.method() 后直接 return,除非你确认父类方法本就不该继续执行
- 别重写 getter/setter 却忘了调用 super,例如 get name() { return 'Mr. ' + super.name; } 才算延续,只写 return 'Mr. Alice' 就是覆盖
用私有字段隔离关键状态,让 super 调用更安全
父类中把校验、缓存、中间结果等放进私有字段(#xxx),子类无法绕过或误改,只能通过 super 走正向通道:
- 父类定义 #validated = false 和 #doValidate(),子类重写 validate() 时必须先 super.validate(),才能确保 #validated 被正确设为 true
- 这样即使子类忘记调用 super,父类内部也能靠私有状态拦截非法后续操作
静态方法和实例方法都支持 super 调用
不只是实例方法能 super,静态方法同样可用 super 访问父类静态逻辑:
- 子类 static create() 中写 super.create(...),可复用父类的工厂校验或默认配置
- 注意:super 在静态方法里指向父类本身,不是父类原型;在实例方法里才指向父类原型
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










