private → 默认 → protected → public:可见性由窄到宽、封装强度由高到低。private仅本类可见;默认限同包;protected扩展至所有子类;public全局可见,慎用以防破坏封装。

private:仅本类可见
这是最严格的限制。哪怕同包、子类、甚至同一个类的不同实例调用,都必须通过本类内部逻辑中转。
- 不能被继承,不能被外部读写
- 典型用途:核心字段(如密码、余额)、纯辅助方法(如 validateInput())
- 注意:private 构造器常用于单例或工具类禁止实例化
默认(不写任何修饰符):仅同包可见
没有关键字,但有实际含义——“包内共享”。它不是“没设置”,而是明确选择了包级可见性。
- 同包类可直接访问;跨包即不可见,哪怕继承也不行
- 适合模块内协作,比如 com.utils 包里的解析器、转换器类
- 类本身也可以用默认修饰符(此时该类只能被同包使用)
protected:本类 + 同包 + 所有子类(含跨包子类)
它是为继承而生的修饰符。重点在于“所有子类”,不管子类在哪个包里,只要继承了就能用。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 子类中可以直接访问父类的 protected 成员(非通过父类实例,而是 this 或 super)
- 不同包子类无法访问父类对象的 protected 成员(如 new Parent().field 不行)
- 常见于模板方法模式、需要子类扩展但不希望完全公开的钩子方法
public:全局可见
无条件开放,没有任何访问边界。编译器不做任何包或继承检查。
立即学习“Java免费学习笔记(深入)”;
- 适用于对外暴露的 API 入口:主类、服务接口、工具方法(如 StringUtils.join())
- public 类必须和文件名一致,且一个 .java 文件最多一个 public 类
- 慎用:不是所有 public 都合理,过度暴露会增加维护成本和误用风险

















