Java类的访问控制仅支持public和包私有(默认)两种修饰符,顶级类不可用private或protected;包私有类用于模块内高内聚封装,内部类才支持private/protected修饰。
Java类的访问控制不是靠“选对修饰符”就能一劳永逸的事,关键在于明确类、成员、包三者之间的边界意图——public 类只能在同名文件中定义,而 default(包私有)类才是日常封装的主力。
类本身能用哪些访问修饰符?
Java 中类的访问控制仅限两种:不写任何修饰符(即包级私有),或用 public。不能用 private 或 protected 修饰顶级类——编译器会直接报错 modifier private not allowed here 或类似提示。
常见误操作是想把工具类设为 private 以防止外部实例化,这行不通;正确做法是用 final + 私有构造函数,例如:
final class StringUtils {
private StringUtils() {} // 阻止实例化
public static String trim(String s) { ... }
}
-
public类必须与文件名完全一致,且一个 .java 文件最多一个public类 - 包私有类(无修饰符)可在一个文件中定义多个,适合内部协作类、测试辅助类等
- 嵌套类(如
static内部类)才支持private/protected修饰
什么时候该用包私有类而不是 public?
包私有类不是“偷懒不加 public”,而是主动收缩可见性。它天然适配模块化设计中的“包内高内聚”原则:比如网络模块里 HttpConfig、RetryPolicy 这些配置类,只被本包内的 HttpClient 使用,就该设为包私有。
立即学习“Java免费学习笔记(深入)”;