在 Java 中,封装(Encapsulation)是面向对象编程(OOP)的三大基本特性之一(另外两个是继承和多态)。要“正确理解”封装,不能只停留在“用 private 修饰属性”这一步,而要从目的、手段、好处三个层面去理解。
封装的本质是:隐藏实现细节,只暴露必要的接口。
换句话说:
就像你开车:
| 修饰符 | 当前类 | 同包 | 子类 | 其他类 |
|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ |
| default | ✅ | ✅ | ❌ | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
典型做法:
private)getter / setterpublic class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负");
}
this.age = age;
}
}
如果没有封装:
user.age = -100; // 逻辑错误
有封装后:
user.setAge(-100); // 直接拦截
// 外部代码不关心内部怎么存
user.getName();
错!
✅ 更好的方式:
public void grow() {
age++;
}
而不是:
user.setAge(user.getAge() + 1);
封装更重要的是职责清晰,不是防黑客。
Java 封装 = 用访问控制隐藏数据 + 用方法暴露行为 + 让对象对自己负责
如果你愿意,我也可以用生活例子 / 面试角度 / 和继承多态的关系再讲一版。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。