高扩展、高内聚的专家级Java代码应以抽象类定义稳定契约(如ApprovalProcess),聚焦“是什么”和“必须做什么”,将可变逻辑交由子类实现,不变逻辑封装于抽象类;用多态替代if-else分支,新增类型只需继承并实现抽象方法;严守单继承+组合优先原则,属性私有、构造约束、访问控制保障内聚。

写出高扩展、高内聚的专家级 Java 代码,关键不在于堆砌语法,而在于用继承、多态和抽象类构建清晰的责任边界与演化路径。核心是:让变化集中、让扩展无侵入、让每个类只专注一件事。
用抽象类定义契约,而非实现细节
抽象类不是为了“复用代码”,而是为了统一语义和强制规范。它应聚焦于“是什么”和“必须做什么”,而非“怎么做”。比如业务中常见的“审批流程”,不同角色(经理、总监、风控)审批逻辑差异大,但都满足“可提交→可驳回→有结果”的契约。
- 声明抽象类时,只暴露稳定接口:如
abstract class ApprovalProcess中定义abstract Result approve(Req req)和void reject(Req req) - 把可变逻辑(如审批阈值、通知方式)抽成 protected 方法或依赖注入,留给子类决定
- 把不变逻辑(如日志记录、状态校验)放在抽象类的具体方法里,子类自动继承,无需重复写
用多态替代条件分支,让新增类型零修改现有代码
if-else 或 switch 判断类型,是扩展性杀手。多态的本质是“编译时约定接口,运行时绑定行为”。只要新类型遵循同一父类/接口,系统就能无缝接纳。
- 避免
if (obj instanceof Manager) { ... } else if (obj instanceof Director) { ... } - 改为统一调用
process.approve(req),由 JVM 动态分派到对应子类实现 - 新增一种审批类型?只需新增一个
class LegalApproval extends ApprovalProcess,实现抽象方法,其他地方一行代码都不动
用继承组织层级,但严守单继承+组合优先原则
继承表达的是严格的“is-a”关系,不是“has-a”或“uses-a”。滥用继承会快速导致类爆炸和耦合固化。
立即学习“Java免费学习笔记(深入)”;
- 员工体系中,
Developer是Employee,合理;但Developer不应继承NotificationService(那是能力,不是身份) - 需要复用能力?用组合:
class Developer { private final EmailNotifier notifier; } - 父类只提供真正共有的字段和行为(如
id、createdAt、validate()),私有字段 + public getter/setter 封装好,不暴露内部结构
用访问控制与构造约束保障内聚性
高内聚意味着类内部状态和行为高度相关,且对外暴露最小必要接口。这靠访问修饰符和构造设计来落地。
- 属性一律
private,只通过final字段 + 构造器初始化关键状态(如userId) - 提供带校验的 setter(如年龄不能为负)或干脆不提供 setter,用 builder 模式封装复杂构造逻辑
- 子类构造器第一行必须显式调用
super(...),确保父类状态完整初始化;抽象父类可定义受保护构造器,防止外部误用


















