一、核心概念和本质
封装是面向对象编程的基石之一,其核心是将数据(属性)和操作数据的方法(行为)绑定为一个整体,通过访问控制,隐藏对象的内部实现细节,仅对外暴露有限的交互接口。就像我们使用的手机,我们无需连接内部电路,只需用过屏幕和按键操纵手机即可。
二、实现方式和技术手段
1.访问修饰符控制可见性
使用private将属性设为私有,阻止外部直接访问;通过public的getter/setter方法提供可控访问路径。
public class BankAccount {
private double balance;
public void deposit(double amount) {
if (amount > 0){
balance += amount;
}
}
public void setBalance(double balance){
this.balance = balance;
}
public double getBalance(){
return balance;
}
}
这种设计确保了余额修改必须通过校验逻辑。
2.方法封装扩展功能
除了数据封装,还可将复杂操作封装为方法。
public class BankAccount {
private double balance;
public void log(){
System.out.println("Balance: " + balance);
System.out.println("------------------------");
System.out.println();
System.out.println();
}
}
三、关键优势与价值
1.数据安全性
通过隐藏属性防止非法篡改。例如银行账户balance属性若直接暴露为public,可能导致负余额等错误状态。
2.降低系统耦合度
内部实现细节变更(如优化数据存储结构)不会影响调用方代码,只需保持接口稳定。
3.增强可维护性
集中化的验证逻辑(如在setter 方法中检查年龄是否为负数)避免代码重复,且修改时只需调整单个方法。
四、开发实践
业务规则封装:将折扣计算、税费规则等封装在领域对象内部
API设计:对外提供简洁的接口,隐藏底层复杂实现(如数据库操作封装为DAO层)
五、注意事项
- 1.避免过度暴露:并非所有属性都需要getter/setter,如Man类的wife属性不提供getter,防止隐私泄漏。
- 2.验证前置原则:在setter方法中加入数据校验,这比在业务逻辑中分散校验更可靠。
- 3.封装层次延伸:不仅限于类级别,还可以通过保(package)访问控制、模块化设计实现更大粒度的封装。
六、总结
封装本质上是一种设计哲学,它通过信息隐藏和接口抽象,帮助开发者构建高内聚、低耦合的系统。