java封装的核心是隐藏实现细节、暴露稳定接口,通过private修饰内部成员、语义化方法命名、接口与实现分离、构造器/builder控制对象创建,实现高内聚低耦合。

Java 中用封装隐藏复杂业务实现细节,核心是把具体逻辑藏在类内部,只暴露简单、稳定、有意义的接口给外部使用。关键不是“不让人看”,而是“不让人依赖不该依赖的东西”。
用 private 修饰内部实现细节
把字段、辅助方法、中间计算过程、第三方调用等设为 private,这是最基础也最关键的一步。外部无法直接访问,自然就无法形成耦合。
- 字段(如订单状态码、缓存 map、数据库连接)一律 private,配以 getter/setter(或更语义化的方法)控制读写逻辑
- 拆解出来的工具方法(比如校验手机号格式、生成订单号前缀)设为 private,避免被误调用或绕过主流程
- 敏感操作(如扣库存、发消息)不暴露原始参数和执行步骤,只提供“下单”“退款”这类业务动词方法
提供高内聚、低参数的公共方法
对外方法名要体现业务意图,参数尽量少而语义明确,内部把复杂判断、分支组合、异常转换全包掉。
- 不要暴露
processOrder(Order order, String ruleId, boolean force)这种带技术参数的方法 - 改成
placeOrder(User user, Cart cart),内部自动选规则、校验库存、生成单号、落库并异步发通知 - 如果某步失败,抛出 业务异常(如
InsufficientStockException),而不是NullPointerException或 SQL 异常
用接口+实现分离抽象与细节
定义清晰的业务接口(如 PaymentService),只声明“能做什么”,不透露“怎么做”。具体实现类(AlipayPaymentServiceImpl、WechatPaymentServiceImpl)把签名验签、重试策略、对账逻辑全封在里面。
- 上层代码只依赖
PaymentService,随时可替换实现,甚至加代理(日志、熔断、Mock)都不影响调用方 - 实现类里可自由引入 Spring RestTemplate、JSON 工具、本地缓存,只要接口契约不变,外部完全无感
- 必要时用 package-private 类或 inner class 封装仅本模块内复用的逻辑,进一步缩小可见范围
善用构造器和 Builder 控制对象创建入口
避免让外部随意 new 出半成品对象。通过私有构造 + 静态工厂方法,或 Builder 模式,在创建阶段就完成必要校验和初始化,把“怎么组装”藏起来。
- 比如
Order.builder().user(u).items(items).build()内部会检查地址是否完整、商品是否下架、总价是否匹配 - 构造器里直接初始化不可变字段(
final)、设置默认状态(this.status = CREATED)、触发预加载(如查用户等级) - 禁止 public 构造器 + 大量 setter,那等于把校验和约束权交给了调用方
封装不是为了保密,而是为了让变化可控、升级安全、协作顺畅。只要接口稳定、行为可预期,内部哪怕重写三次,调用方也不用改一行代码。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











