包访问权限(默认权限)指不加任何访问修饰符时成员仅对同包类可见:同包类可直接访问,跨包子类也不可访问;默认类仅本包可实例化或继承;它比private灵活、比protected安全,适用于模块内部封装。

Java 中“包的访问权限”不是由包本身控制的,而是通过类、方法或变量上不写任何访问修饰符(即默认修饰符)来实现的。这种权限叫包访问权限(package-private),也常被称作默认访问权限。它不依赖于包声明语句(package xxx;),而是由成员是否显式加了 public、protected 或 private 决定。
默认修饰符只对同包内可见
当一个类、方法或字段没有使用 public、protected、private 时,它就自动获得包访问权限。这意味着:
- 同一包下的所有类,无论是否继承关系,都能直接访问该成员
- 不同包中的类,即使继承了这个类,也不能访问默认修饰的成员
- 默认修饰的类,只能被同一包内的其他类使用(不能被其他包 import 并 new 实例)
类和成员的默认权限表现不同
默认修饰符可用于类、字段、方法、构造器,但效果有区别:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 修饰类:该类仅在本包中可被实例化或继承;其他包无法 import 或引用
- 修饰字段或方法:只要调用方和定义方在同一个包,就能直接访问,无需继承关系
- 不能跨包继承访问:子类在不同包中,无法访问父类的默认方法——哪怕它是子类,也不行
和 protected 的关键区别
初学者容易混淆默认权限与 protected。注意:
-
protected允许同包 + 不同包子类访问 - 默认权限只允许同包(任何类)访问,子类在不同包中也无权访问
- 例如:
class A { void m() {} }在pkg1;class B extends A在pkg2;B不能调用new A().m(),也不能在自身方法里写super.m()
实际使用建议
默认访问权限适合用于模块内部协作,是封装设计中很实用的一层:
- 把工具类、辅助方法、内部状态字段设为默认,避免暴露给外部模块
- 比
private更灵活(同包可复用),又比protected更安全(不向子类开放) - 不要为了“省事”而不写修饰符——要明确表达设计意图:这个东西就是只给本包用的
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










