java访问权限本质由“所在位置(包内/包外)”和“继承关系(是否子类)”两个维度决定:public无条件开放;protected允许包内或子类访问;default仅限包内;private仅限本类。

Java面向对象中,访问权限的可见性本质是控制“谁能在哪看到并使用某个成员”。梳理的关键不是死记表格,而是抓住两个维度:**所在位置(包内/包外)** 和 **继承关系(是否为子类)**。四种修饰符在这两个维度上的交集,就决定了实际可访问范围。
public:无条件开放
只要能拿到这个类的引用,不管在哪个包、是不是子类,都能直接访问。适合对外暴露的接口、工具方法、常量等稳定契约。
- 类、方法、字段、构造器都可用
- 顶级类也能用 public(但只能有一个 public 类,且文件名必须匹配)
- 子类重写 public 方法时,不能降级为 protected 或 private
protected:包内 + 子类双通道
它不看“是不是同一个包”,只看“是不是自己人”——要么同包,要么是子类(哪怕跨包)。父类想把某些能力留给后代扩展,又不想让无关类调用,就用它。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 不能修饰顶级类(只有内部类可用)
- 子类即使在不同包,也能通过继承直接访问 protected 成员(不用通过父类实例)
- 同包非子类可以访问,但必须通过对象引用(比如 new 父类().protectedMethod())
default(包私有):仅限包内协作
没写任何修饰符,默认就是包级可见。它不关心继承,只认包名。适合模块内部组件之间自由配合,但对外完全隐藏实现细节。
- 类、接口、方法、字段都支持
- 跨包的子类也访问不到 default 成员(继承了,但不可见、不可用)
- 是构建内聚包(如 utils、domain、infrastructure)时最常用、最自然的选择
private:彻底封死
只对声明它的那个类本身有效。连子类都不行,哪怕在同一包里也不行。这是封装的底线,用来保护核心状态和辅助逻辑。
- 强制外部通过 getter/setter 或其他公共方法间接操作
- 构造器设为 private 可实现单例或工厂模式
- 内部类可以访问外围类的 private 成员(这是 Java 特例,体现“一体性”)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










