Java封装的核心是用class包装数据与行为,并通过private隐藏字段、public方法控制访问。例如Person类中将name、age设为private,再提供getName()、setAge()等方法实现安全交互。

Java 中把数据和行为包装起来,核心就是用 类(class) 作为载体,配合 访问修饰符(尤其是 private) 和 公共方法(getter/setter 或业务方法) 来实现。不是简单地把变量和方法写在一起就叫封装,关键在于“控制访问”和“隐藏细节”。
用 class 定义一个逻辑单元
类天然就是数据(字段)和行为(方法)的容器。比如描述一个人:
- 数据:姓名、年龄、身份证号
- 行为:报名考试、计算工龄、打印信息
把这些都放在同一个 Person 类里,就完成了初步的“包装”。但此时如果所有字段都是 public,外部仍可随意读写——这不算真正封装。
用 private 隐藏内部数据
把字段声明为 private,是封装的第一步。它切断了外部对数据的直接访问路径:
立即学习“Java免费学习笔记(深入)”;
-
private String name;→ 外部不能写person.name = "张三"; -
private int age;→ 外部不能读int a = p.age;
这样,数据就被“锁进类里面”,只能由本类内部代码操作,从源头上防止非法修改或误用。
用 public 方法提供可控交互入口
隐藏数据后,必须给外界留出安全的使用方式,这就是 getter/setter 和业务方法的作用:
-
public String getName() { return name; }→ 只读暴露,不暴露字段本身 public void setAge(int age) { if (age > 0 && age → 加入校验逻辑,确保数据合法-
public void enrollExam(String subject) { System.out.println(name + " 报名了 " + subject); }→ 把行为和数据绑定,调用时自动关联当前对象状态
这些方法对外是透明的接口,对内可以自由调整实现(比如 age 改成从数据库查、name 拆成 firstName/lastName),外部代码完全不受影响。
封装的本质是“职责隔离”
一个封装良好的类,对外只回答两个问题:
- “你能做什么?” → 通过 public 方法体现(如
save()、validate()) - “你当前是什么状态?” → 通过有限的 getter 或 toString() 等方式呈现
它不回答:“你的 age 存在哪?”、“你用什么算法算工龄?”、“字段是不是 static?”——这些都属于内部实现,不该暴露。


















