java通过private、default、protected、public四类访问修饰符实现封装:private最严格,仅本类可见;default限于同包;protected允许同包及子类访问;public配合封装方法暴露安全接口。

Java 通过 访问修饰符 配合 封装原则,从编译层面限制外部对类内部实现细节的直接访问,从而保护数据安全和逻辑完整性。
private 修饰符:最严格的隐藏手段
将字段或方法声明为 private,表示它仅在本类内部可见。外部类(包括子类、同包类)完全无法访问,哪怕通过对象引用也不行。
- 例如:
private String password;—— 外部既不能读取也不能修改该字段 - 若需对外提供有限能力,必须配套 public getter/setter 方法,在方法中加入校验、日志、转换等控制逻辑
- 构造器也可设为 private,用于禁止外部实例化(如单例、工具类)
default(包级私有):默认的安全边界
不写任何修饰符时,成员具有包级访问权限。这意味着它只对同一包内的类开放,天然隔离了跨包调用。
- 适合内部协作场景,比如工具类中的辅助方法、测试用的模拟变量
- 避免把实现细节暴露给无关模块,同时保留包内复用灵活性
- 比 public 更安全,比 private 更实用,是很多框架内部组件的首选
protected:有节制地向子类开放
protected 允许同包类 + 不同包子类访问,但不允许通过子类对象访问父类的 protected 成员——即只能在子类内部代码中使用,不能在子类外部“借道”调用。
- 常用于设计可扩展的父类:把核心逻辑或共享状态设为 protected,留给子类继承重用
- 不等于“公开”,它仍屏蔽了无关第三方,防止随意篡改
- 注意:protected 字段虽可被子类访问,但依然建议用 protected 方法封装操作,而非直接暴露字段
public + 封装方法:暴露接口,隐藏实现
即使方法是 public,只要它不暴露内部字段或复杂逻辑,就仍是安全的。关键在于不返回可变对象引用、不提供直接修改状态的入口、不泄露内部结构。
- 例如:
public List<user> getUsers()</user>应返回Collections.unmodifiableList(...),而非原始 list 引用 - setter 方法中可做参数校验:
if (age 150) throw new IllegalArgumentException(); - 内部使用 private static 缓存、logger、计数器等,完全对外不可见
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











