Java访问权限修饰符共四种:public(跨包全局可见)、protected(包内+跨包子类可见)、默认(仅同包可见)、private(仅本类可见);public和默认可修饰类,protected和private仅限成员;无package-private关键字。

Java 基础中访问权限修饰符一共有四种,按可见性从宽到严排列:public、protected、默认(无修饰符)、private。
这四种不是按“关键字数量”分类,而是按作用域范围自然形成四个层级,本质是封装机制的体现。
按作用域分类(最实用的理解方式)
-
跨包全局可见:只有
public,任何类、任何包都能访问。 -
包内 + 跨包子类可见:
protected,同一包内所有类可直接访问;不同包中只能通过继承关系由子类访问(不能直接 new 父类对象去调用)。 - 仅限同包可见:默认(即不写任何修饰符),也叫“包级私有”或 friendly,连同包的子类都行,但跨包哪怕继承也不行。
-
仅限本类内部可见:
private,连同包其他类、子类(无论是否同包)都不能访问,只能在定义它的那个类里用。
按能否修饰类来区分(补充细节)
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
-
public和 默认修饰符可用于修饰类(但一个.java文件里最多一个 public 类,且文件名必须匹配)。 -
protected和private不能修饰外部类,只能修饰成员(变量、方法、内部类、构造器等)。
常见误区提醒
- 没有
package-private这个关键字,所谓“包私有”就是不写修饰符,默认行为。 -
protected不等于“子类专用”,它对同包非子类也开放,这点常被忽略。 - 子类能否访问父类成员,取决于两件事:一是父类成员的修饰符,二是访问方式(直接访问?通过继承?跨包?)。
基本上就这些。

















