1. 封装的概念与本质
封装是面向对象编程(OOP)三大特性之一,它就像给电子产品套上保护壳——既隐藏内部复杂电路,又通过精心设计的接口让用户能安全操作。我在实际开发中发现,很多初学者容易把封装简单理解为"把属性设为private",这其实只看到了冰山一角。
真正的封装包含三个层次:
- 数据隐藏:通过访问修饰符(private/protected)限制对内部数据的直接访问
- 行为暴露:通过public方法提供可控的操作入口
- 完整性保护:在方法中添加校验逻辑保证对象始终处于有效状态
举个例子,银行账户类如果直接把balance属性公开,任何代码都能随意修改金额。而正确的封装应该是:
java复制public class BankAccount {
private double balance;
public void deposit(double amount) {
if (amount <= 0) throw new IllegalArgumentException("金额必须大于零");
this.balance += amount;
}
public boolean withdraw(double amount) {
if (amount <= 0 || amount > balance) return false;
this.balance -= amount;
return true;
}
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 封装的实现方式与技术细节
2.1 访问控制修饰符的实战选择
Java提供了四种访问级别,我在团队代码评审时经常看到修饰符滥用的情况:
- private:仅类内部可见。适用于所有实现细节,如辅助方法、状态变量
- protected:子类和同包可见。慎用!这实际上破坏了封装,除非明确设计为继承扩展点
- 默认(package-private):同包可见。适合内部组件协作,但跨包重构时会成为障碍
- public:全局可见。只用于真正的API接口
经验法则:从最严格的private开始,只有确实需要暴露时才放宽限制。我见过太
