Java继承实现业务扩展的核心是分离“变”与“不变”:父类固化共性(如BaseAssetEntity封装ID、状态等通用字段和校验),中间层按领域抽象(如TradeAssetEntity、LogisticsAssetEntity),子类专注专属逻辑并用模板方法预留扩展点,辅以接口与组合避免僵化,同时严格管控访问修饰符确保层级有效。

Java 中继承实现业务的层级扩展,核心是把“变”与“不变”分离,用父类固化共性逻辑,子类专注差异化实现。不是堆砌继承层数,而是让每一层都承载明确的业务语义。
围绕业务共性建模顶层基类
先识别跨多个业务线都存在的字段和行为,比如所有资产类实体都有 ID、状态、创建时间、软删除标记、版本号、审计人等。这些不随具体业务变化的部分,统一抽到 BaseAssetEntity 中:
- 使用 @Id、@Version、@CreatedDate 等 JPA 注解声明通用元数据
- 提供 validateCommon() 封装基础校验(如 ID 非空、status 枚举合法)
- 字段建议用 protected 修饰,既允许子类访问,又避免外部随意修改
按领域抽象中间层,收敛业务语义
顶层基类之后,不要直接跳到具体业务类,而是插入一层领域抽象类,表达某类业务的共性能力。例如:
- TradeAssetEntity:封装交易域通用字段(amount、currency、channelCode)和方法(calculateFee()、isRefundable())
- LogisticsAssetEntity:定义物流域共性(trackingNo、warehouseId、deliveryTime)
- 这类类不直接实例化,只为下层提供结构约束和逻辑复用
子类聚焦专属行为,通过模板方法预留扩展点
最底层的具体业务实体(如 OrderAsset、PaymentAsset)只添加自己独有的字段和业务方法,并利用模板方法模式控制流程:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 父类定义骨架:save() → validate() → beforeSave() → persist()
- 将 beforeSave() 声明为 protected abstract,强制子类实现自己的前置逻辑(如订单要校验库存、支付要冻结资金)
- 关键不变逻辑(如雪花 ID 生成、状态流转校验)用 final 方法封装,子类不可重写,保障一致性
配合接口与组合,避免继承僵化
继承表达的是 “is-a”,但业务中常需 “has-a” 或能力叠加。这时应主动降级继承,改用更灵活的方式:
- 审计能力用 Auditable 接口 + 实现类注入,而非让所有实体继承含 audit 字段的父类
- 风控校验、金额计算等横切逻辑,封装成独立服务(如 RiskValidator),通过组合注入到需要的实体中
- 若某场景需同时具备订单和物流属性,优先让 OrderAsset 持有 LogisticsInfo 对象,而不是强行拉通继承链
不复杂但容易忽略:层级是否有效,取决于成员能否被子类访问。private 字段子类看不见,但可通过 protected getter 提供安全通道;default(包私有)成员跨包子类无法继承,会切断层级——设计时得盯住访问修饰符的实际作用范围。

















