Java 封装详解
一、什么是封装?
封装(Encapsulation)可以理解为 “包装”:将对象的状态(属性)和行为(方法)捆绑在一起,通过访问控制符限制外部直接访问内部细节,只允许通过预定义的方法与对象交互。
举例:现实中的 “手机” 就是封装的典型案例 —— 用户无需知道内部芯片、电路的工作原理(隐藏细节),只需通过屏幕、按键等接口(公共方法)操作手机(打电话、发消息)。
二、为什么需要封装?
- 数据安全:防止外部随意修改对象属性,避免不合理的值(如年龄为负数)。
- 隐藏实现细节:外部只需关注 “如何用”,无需知道 “如何实现”(如调用
ArrayList的add()方法时,无需了解底层数组扩容逻辑)。 - 代码可维护性:内部实现修改时(如属性存储方式变化),只要公共接口不变,外部代码无需调整。
三、如何实现封装?
Java 通过访问控制符和公共方法实现封装,步骤如下:
- 用
private修饰属性(隐藏属性,禁止外部直接访问); - 提供
public的getter方法(用于获取属性值)和setter方法(用于修改属性值); - 在
setter方法中添加逻辑验证(如限制值的范围)。
四、核心:访问控制符的作用
Java 通过 4 种访问控制符控制访问权限,封装的关键是合理使用
private和public:| 修饰符 | 同一类中 | 同一包中 | 不同包的子类 | 不同包的非子类 | 用途 |
|---|---|---|---|---|---|
private |
✔️ | ❌ | ❌ | ❌ | 隐藏属性 / 内部方法 |
default |
✔️ | ✔️ | ❌ | ❌ | 包内可见(默认,不写) |
protected |
✔️ | ✔️ | ✔️ | ❌ | 允许子类访问 |
public |
✔️ | ✔️ | ✔️ | ✔️ | 对外暴露的公共接口 |
封装原则:属性通常用
private,公共方法用public,内部辅助方法用private。五、封装的高级应用:JavaBean 规范
JavaBean 是封装的典型实践,它是一种遵循特定规范的类:
- 类是
public的,有无参构造方法; - 属性用
private修饰; - 提供
public的getter/setter(布尔类型的getter通常命名为isXxx())。
public class User {
private String username;
private boolean isVip; // 布尔属性
// 无参构造
public User() {}
// getter/setter
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
// 布尔属性的getter用isXxx()
public boolean isVip() { return isVip; }
public void setVip(boolean vip) { isVip = vip; }
}
JavaBean 广泛用于框架(如 Spring、MyBatis)中,便于数据传递和序列化。
浙公网安备 33010602011771号