public全局可见,无包或继承限制;private仅本类可用;protected允同包及子类访问;default(无修饰符)限于同包访问。

public 修饰符:全局可见,无包或继承限制
作用于类时,该类可被任意其他类访问,但一个源文件中最多只能有一个 public 类,且文件名必须与类名一致。作用于方法或成员变量时,任何类、任何包、无论是否继承,都能直接调用或读写。
常见用法包括:对外暴露的 API 类(如 ArrayList)、工具类中的静态方法(如 Math.max())、需要跨模块共享的常量字段(如 public static final int MAX_SIZE = 100;)。
private 修饰符:严格封装,仅限本类内部使用
不能用于外部类(即不能写 private class A),但可修饰成员变量、方法、构造器和内部类。一旦标记为 private,连同包的其他类、子类(即使重写了方法)都无法直接访问。
典型场景是隐藏实现细节:比如把敏感字段(如密码、ID)设为 private,再提供 public 的 getter/setter 控制读写逻辑;或者将辅助计算方法设为 private,避免被误调用。
protected 修饰符:支持继承扩展,兼顾包内协作
不能修饰外部类,但可用于成员变量、方法和构造器。它允许三类访问:本类内部、同包其他类、不同包的子类(通过继承关系访问父类的 protected 成员)。
注意:不同包的非子类无法访问,哪怕持有子类对象也不行。常用在模板方法模式中——父类定义 protected void init(),让子类按需重写;或在框架设计中预留钩子方法供子类定制行为。
默认(无修饰符):包级私有,适合模块内协作
不写任何修饰符时,类、成员变量、方法、构造器都具有包级访问权限。同一包内的所有类可自由访问,跨包则完全不可见——无论是否为子类。
适合内部组件协同:比如一个业务包里的 Helper 工具类、ConfigLoader 配置解析器,只希望包内服务使用,不对外暴露接口。这也是 Java 中最常被低估却非常实用的封装层级。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











