Java封装性通过权限修饰符控制成员访问范围,实现“隐藏内部细节,暴露必要接口”;private仅本类访问,默认同包可访,protected加子类可访,public全局可访;典型做法是private字段配public getter/setter。

Java 的封装性主要通过权限修饰符控制类成员(字段、方法、构造器等)的访问范围来实现,核心是“隐藏内部细节,暴露必要接口”。权限修饰符决定了谁可以读写字段、调用方法,从而约束外部对对象状态的直接干预。
四种权限修饰符的作用范围
Java 提供 private、默认(包级私有)、protected 和 public 四种修饰符,访问能力由窄到宽:
- private:仅限本类内部访问。这是封装的基石,字段通常用 private 修饰,防止外部随意修改
- 默认(不写修饰符):同包内所有类可访问。适合包内协作,但不对外暴露
- protected:同包内 + 不同包的子类可访问。常用于给继承体系留出扩展入口,但不向无关类开放
- public:任何地方都可访问。一般只用于提供明确、稳定的公共方法(如 getter/setter、业务方法),而非字段本身
典型封装写法:private 字段 + public getter/setter
不直接暴露字段,而是提供受控的访问方式:
public class Person {
private String name; // 外部不可直接读写
private int age;
// 提供读取能力(getter)
public String getName() {
return name;
}
// 提供受控写入能力(setter)
public void setAge(int age) {
if (age >= 0 && age <= 150) { // 加入校验逻辑
this.age = age;
}
}
}
这样既隐藏了 age 的存储细节,又能在赋值时做合法性检查,体现了封装的价值——不止是“隐藏”,更是“可控”。
立即学习“Java免费学习笔记(深入)”;
构造器与方法的权限设计也属于封装的一部分
封装不只是字段的事,整个类的使用边界都靠权限修饰符划定:
- 构造器设为 private 可实现单例或工厂模式,禁止外部随意 new 实例
- 工具类中的静态方法常设为 public static,但内部辅助方法可用 private 或默认修饰,避免污染 API
- 模板方法模式中,父类定义 public final 模板方法,把可变步骤设为 protected,留给子类重写——既开放扩展点,又防止破坏流程
封装不是越私密越好,关键在职责分明
滥用 private 会导致测试困难、扩展僵硬;过度用 public 则失去封装意义。合理做法是:
- 字段优先 private,除非有充分理由(如枚举常量、不可变 public static final 字段)
- 方法按使用场景定权限:对外服务用 public,包内复用用默认,子类定制用 protected,纯内部逻辑用 private
- 定期审视 API 表面:哪些方法真该被外部调用?能否合并、隐藏或重构?
权限修饰符是实现封装的语法工具,而封装的本质是“明确责任边界”——让每个类清楚自己该管什么、不该管什么,以及谁有权和它打交道。


















