封装是面向对象编程的基石,即把数据和操作数据的方法捆在一起,通过权限控制与接口抽象实现安全交互;标准做法是属性私有化、提供带校验的getter/setter,如bankaccount中balance不暴露,存取款均经逻辑校验。

封装是面向对象编程的基石,核心就一句话:把数据和操作数据的方法捆在一起,不让外部随便碰内部细节,只留安全、可控的入口。
封装的本质是“权限控制 + 接口抽象”
它不是单纯地加个 private 就完事,而是通过访问修饰符划定“谁可以看、谁可以改”,再配合方法提供有逻辑的交互。比如一个人的年龄,外部不该直接写 person.age = -5,而应调用 setAge(25),由类内部判断是否合法。
标准实现三步走
-
属性私有化:所有字段一律用
private修饰,切断外部直连路径 -
提供 getter/setter:按规范命名(
getName()、setName(String)),类型与字段严格一致 - 在 setter 中加入业务校验:比如用户名不能为空、余额不能为负、年龄必须在 0–150 之间——这才是封装真正起作用的地方
为什么非得这么干?
不封装的代码就像没上锁的保险柜:
- 直接赋值可能破坏对象状态(如
legs = -4) - 后续修改内部存储方式(比如把 age 改成由出生年份计算)时,所有外部直读直写的代码全得重写
- 多人协作中,没人知道哪个字段能改、怎么改才安全
一个真实可用的 BankAccount 示例
(体现封装不只是形式,更是防御性设计)
public class BankAccount {
private double balance;
public double getBalance() {
return balance;
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public boolean withdraw(double amount) {
if (amount > 0 && balance >= amount) {
balance -= amount;
return true;
}
return false; // 拒绝非法取款,不抛异常,由调用方决定如何处理
}
}
这里没有暴露 balance 字段,所有资金变动都经过逻辑把关,调用者只需关心“能不能存、能不能取”,不用懂账户怎么记账。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











