Java基础:Java 面向对象编程(OOP)之【封装性】
·
封装(Encapsulation)是面向对象编程(OOP)的四大核心特性之一(其余为继承、多态、抽象),它强调将对象的内部状态(数据)和行为(方法)包装在一起,并对外隐藏实现细节,仅通过受控的公共接口与外界交互。封装的核心目标是:提高安全性、增强可维护性、降低耦合度。
一、封装的核心思想
“高内聚,低耦合”
- 高内聚:类内部的数据和操作紧密关联;
- 低耦合:类与外部依赖尽可能少,通过清晰接口交互。
通俗地说:
“你不需要知道我是怎么做的,你只需要知道我能做什么。”
二、Java 中如何实现封装?
1. 使用访问修饰符控制可见性
| 修饰符 | 当前类 | 同包 | 子类 | 其他包 |
|---|---|---|---|---|
private |
✅ | ❌ | ❌ | ❌ |
| 默认(无) | ✅ | ✅ | ❌ | ❌ |
protected |
✅ | ✅ | ✅ | ❌ |
public |
✅ | ✅ | ✅ | ✅ |
✅ 封装的关键做法:
- 成员变量(字段)设为
private→ 防止外部直接访问或修改; - 提供
public的 getter/setter 方法 → 控制读写逻辑。
2. 示例:未封装 vs 封装
❌ 未封装(危险!)
class Person {
public String name;
public int age;
}
// 外部可随意修改
Person p = new Person();
p.age = -10; // 年龄为负?不合理!
✅ 封装后(安全可控)
class Person {
private String name;
private int age;
// Getter
public String getName() {
return name;
}
public int getAge() {
return age;
}
// Setter(可加入校验逻辑)
public void setName(String name) {
if (name != null && !name.trim().isEmpty()) {
this.name = name;
}
}
public void setAge(int age) {
if (age >= 0 && age <= 150) {
this.age = age;
} else {
throw new IllegalArgumentException("年龄必须在0-150之间");
}
}
}
✅ 优势:
- 防止非法数据(如负年龄);
- 未来修改内部实现(如用
LocalDate存生日)不影响外部调用;- 可在 getter/setter 中加入日志、权限控制、缓存等逻辑。
三、封装的典型应用场景
1. 数据校验
public void setSalary(double salary) {
if (salary < 0) {
throw new IllegalArgumentException("薪资不能为负");
}
this.salary = salary;
}
2. 只读属性(无 setter)
private final String id; // 唯一ID,创建后不可变
public String getId() {
return id;
}
// 不提供 setId() → 外部无法修改
3. 隐藏复杂实现
public class BankAccount {
private double balance;
// 对外只暴露“取款”行为,隐藏余额计算细节
public boolean withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
return true;
}
return false;
}
}
四、封装 ≠ 完全隐藏
- 封装不是“不让别人用”,而是“规范地用”;
- 合理的封装应提供清晰、稳定、简洁的公共接口;
- 过度封装(如所有方法都 private)会丧失类的可用性。
五、常见误区
| 误区 | 正确认知 |
|---|---|
| “封装就是加 private” | 封装是设计思想,private 只是手段之一 |
| “所有字段都要有 getter/setter” | 只暴露必要的接口,避免“贫血模型” |
| “封装能提升性能” | 封装主要提升可维护性与安全性,性能影响可忽略 |
六、总结:封装的价值
| 优势 | 说明 |
|---|---|
| 安全性 | 防止非法访问和数据污染 |
| 可维护性 | 修改内部实现不影响外部代码 |
| 灵活性 | 可在方法中加入新逻辑(如日志、缓存) |
| 模块化 | 降低系统耦合,便于团队协作 |
封装是 OOP 的基石,也是写出健壮、可维护 Java 代码的第一步。
🙌 感谢你读到这里!
🔍 技术之路没有捷径,但每一次阅读、思考和实践,都在悄悄拉近你与目标的距离。
💡 如果本文对你有帮助,不妨 👍 点赞、📌 收藏、📤 分享 给更多需要的朋友!
💬 欢迎在评论区留下你的想法、疑问或建议,我会一一回复,我们一起交流、共同成长 🌿
🔔 关注我,不错过下一篇干货!我们下期再见!✨
更多推荐



所有评论(0)