Java四个访问修饰符的核心区别在于包和继承维度的可见性:private仅本类可访问;default(无修饰符)限同包;protected允同包及不同包子类访问;public对所有类开放。

Java 的四个访问修饰符控制成员(变量、方法、构造器)在不同上下文中的可见性,核心区别在于“谁能看到、谁可以调用”,关键维度是包(package)和继承(subclass)。
private:仅限本类内部使用
被 private 修饰的成员只能在声明它的那个类里直接访问。同包其他类、子类(无论同包与否)、外部类全都不行。
- 常用于隐藏实现细节,比如敏感字段(密码、ID)、辅助计算方法
- 若需对外提供读写能力,应搭配 public 的 getter/setter 方法
- 不能修饰外部类或接口
default(无修饰符):包内自由,包外隔绝
不写任何修饰符时即为 default(也叫包级私有)。它允许同一包下的所有类访问,但跨包就完全不可见——哪怕对方是子类也不行。
- 适合封装包内部协作逻辑,比如工具类、辅助类之间的通信
- 接口中的方法默认是 public,变量默认是 public static final,不受 default 影响
- 可修饰类、接口、变量、方法、内部类
protected:包内 + 所有子类
protected 比 default 更进一步:同包类能访问,不同包的子类也能通过继承关系访问(但不能通过父类实例直接调用)。
立即学习“Java免费学习笔记(深入)”;
- 典型用途是为继承体系预留扩展点,比如模板方法中的钩子方法
- 子类中可重写 protected 方法,也可在子类内部直接调用 inherited protected 成员
- 不能修饰外部类
public:彻底开放,无限制访问
public 成员对任何类都可见,不管是否同包、是否继承、是否在同一个模块里。
- 适用于稳定对外暴露的 API,如工具方法、实体类的公共属性、框架入口方法
- 类本身若声明为 public,则必须与文件名一致,且该类可被任意其他包 import 使用
- 过度使用会削弱封装性,违背“最小权限原则”


















