java四种访问修饰符的可见边界:public全局可访但顶级类需文件名一致;private仅限本类;protected包内自由+子类继承访问;default(包级私有)仅限同包。

掌握 Java 四种访问权限修饰符的关键,在于理解每种修饰符的“可见边界”及其在不同上下文(类、接口、成员)中的实际约束。不是死记表格,而是看清“谁能在哪儿访问什么”。
public:全局可触达,但顶级类有命名硬约束
public 是唯一能跨包、跨继承、跨任意类访问的修饰符。它适用于你明确希望对外暴露的 API 元素。
- 修饰类时:该类必须独占一个 .java 文件,且文件名必须与类名完全一致(如 public class UserService → 文件必须叫 UserService.java)
- 修饰接口、方法、字段、构造器:任何其他类,无论是否同包、是否继承,都能直接使用
- 不能修饰局部变量或局部内部类
private:彻底封死,仅限本类代码块内调用
private 是最严的封装闸门,连子类都不可穿透。它不提供“继承可见性”,只服务于本类内部逻辑隔离。
- 可修饰成员变量、成员方法、内部类(包括静态和非静态)、构造器
- 不可修饰顶级类、接口、局部变量、局部类
- 典型用途:隐藏敏感字段(如密码、余额)、封装辅助逻辑(如校验、日志)、防止子类误改核心行为
protected:包内自由 + 子类继承通道
protected 不是“半公开”,而是“家族协作权限”——同包任意类可直接访问;不同包时,只有子类可通过继承访问(不能通过父类实例点出来)。
- 可修饰成员变量、方法、构造器、内部类;不可修饰顶级类或接口
- 子类访问 protected 成员必须通过 this 或 super,不能写 new Parent().protectedField
- 常见于模板方法模式、框架基类设计,比如父类定义 protected void init(),由子类按需重写
默认(无修饰符):包级私有,最常被低估的协作边界
没写任何修饰符 ≠ 没权限控制,而是“仅限本包”。这是模块化开发中天然的封装层,比 private 宽松,比 protected 更安全。
- 可修饰类、接口、成员变量、方法、内部类;不可修饰构造器(构造器可默认,但语义上仍属成员)
- 不同包的子类无法访问 default 成员,哪怕继承了也看不到
- 适合包内工具类、组件间协作方法、内部实现类(如 JsonParserImpl),避免外部依赖泄漏
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











