在 Java 中,**封装(Encapsulation)**是面向对象编程(OOP)的三大特性之一(封装、继承、多态)。它的核心思想是:把对象的属性(数据)和行为(方法)包装在一起,并隐藏对象的内部实现细节,只对外提供可控的访问方式。
通过将成员变量设为 private,防止外部直接修改对象内部状态。
class Student {
private int age;
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
}
}
public int getAge() {
return age;
}
}
✅ 外部不能直接 student.age = -10;,从而保证数据合法性。
如果内部实现改变,只要对外接口不变,调用者无需修改代码。
// 内部可能从变量改为计算
public int getAge() {
return currentYear - birthYear;
}
通过访问修饰符灵活控制可见性:
| 修饰符 | 本类 | 同包 | 子类 | 其他 |
|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ |
| default | ✅ | ✅ | ❌ | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
外部只依赖公开方法,不依赖内部实现,系统更容易扩展。
使用 getter / setter 是一种统一规范,便于团队协作。
public class Person {
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) {
this.age = age;
}
}
}
Java 封装的作用就是:隐藏细节、保护数据、提供可控接口、提高安全性和可维护性。
如果你愿意,我也可以用生活比喻或面试角度再给你讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。