Java抽象业务建模中继承的核心是is-a关系,用于组织架构(如集团→子公司)和角色泛化(如用户→VIP会员)两类天然场景,需满足Liskov替换原则,通过三层抽象类分层封装共性与差异,并用protected final、final方法和构造注入保障契约边界。

Java 中继承在抽象业务中建模,核心是用 is-a 关系锚定语义,把真实存在的层级归属或角色归属转化为类之间的父子结构,而不是为复用代码强行拉关系。
先识别可建模的业务“上下级”或“角色泛化”关系
抽象业务中常见两类天然继承场景:
- 组织架构类:集团 → 子公司 → 部门 → 团队 → 成员。每层有共性(code、name、负责人、创建时间),又有专属职责(子公司管法人资质,部门管预算,团队管排期)。
- 角色/能力泛化类:用户 → 普通会员 → VIP会员 → 黑金会员;订单 → 普通订单 → 秒杀订单 → 跨境订单。上层定义契约,下层特化规则。
关键判断标准:子类对象能否安全替换父类对象使用(Liskov 替换原则)。比如“VIP会员”可以当作“用户”传入登录校验方法,但“支付配置”不能当作“用户”——后者不是 is-a,是 has-a,该用组合。
用抽象类分层表达共性与差异
不堆砌深度,控制在三层以内:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
顶层抽象类(如
BusinessEntity):只放所有子类都必须有的字段(id、status、createdAt)和基础行为(validateCommon()、toSummaryString())。 -
中间领域抽象类(如
TradeOrder):封装该领域共性逻辑,比如金额校验、渠道码规范、状态机骨架(submit() → confirm() → close()),但把具体校验条件(如“秒杀订单限购1件”)留空或设为 abstract。 -
具体业务类(如
FlashSaleOrder):只专注自身规则,比如重写checkInventory()调用限流服务,或覆盖calculateFee()加入秒杀服务费。
用 protected + final + 构造注入守住边界
避免子类随意篡改关键契约:
- 共性字段(如
id、version)声明为protected final,强制通过构造器初始化,杜绝运行时被误设。 - 核心流程方法(如
executeWorkflow())设为final,内部调用doValidate()和doPersist()这些 protected abstract 方法,让子类只填空,不改主干。 - 配置项(如超时、重试次数)由基类统一接收并固化,子类构造时传入定制化配置实例,而非各自 new 一个新对象。
配合重写与 super 实现“同名不同义”的精准控制
同一操作在不同层级含义不同,靠重写 + super 调用实现逻辑叠加:
- 父类
Order定义cancel()做基础状态校验(是否已发货)。 - 子类
RefundOrder重写cancel(),先super.cancel(),再追加“检查退款单是否已生成”逻辑。 - 子类
LogisticsOrder再重写,同样先 super,再触发运单作废接口。
这样既复用校验,又不丢失层级语义,调用方仍用统一接口,底层自动适配。

















