java通过private、默认、protected、public四种修饰符分层控制成员可见性:private仅本类可用;默认限同包;protected允同包及跨包子类访问(不可通过父类对象调用);public完全开放,但外部类需public才可被其他包导入。

Java 通过 private、protected、public 和 默认(包私有) 四种访问修饰符,分层控制类成员(字段、方法、内部类)的可见范围。关键不是“能不能写”,而是“谁能在哪用”——它由访问位置(同类 / 同包 / 子类 / 其他包)和访问方式(直接调用 / 继承获得 / 对象引用)共同决定。
private:只在本类内部可用
被 private 修饰的成员,连同包其他类或子类都不可见,哪怕子类继承了该类也无法访问父类的 private 成员。
- 常用于封装敏感数据,比如账户余额、密码字段
- 必须配合 public 或 protected 的 getter/setter 方法对外提供可控访问
- 构造器、普通方法、字段、内部类都可使用 private;但不能修饰外部类
默认(不写修饰符):仅限同包内访问
没有加任何修饰符时,默认为 package-private(包级私有)。它比 private 宽松,但比 protected 严格——跨包的子类也访问不到。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 适合模块内部协作,例如工具类、配置类、DAO 层辅助方法
- 外部类可以是默认权限(即只能被同包类 import 使用)
- 接口中的方法默认是 public,变量默认是 public static final,不受此规则影响
protected:同包 + 子类(跨包也行)可访问
protected 是继承场景的关键修饰符。它允许子类重写或调用父类方法,即使子类在不同包中;但不能通过父类对象引用访问。
- 子类中可直接使用
this.xxx()或super.xxx()调用 inherited 的 protected 方法 - 但不能写
Parent p = new Parent(); p.protectedMethod();(编译报错) - 不能修饰外部类或接口
public:完全开放,无访问限制
public 是最宽松的级别。只要类本身能被访问(比如是 public 类或已 import),其 public 成员就能在任意位置被调用。
- 适用于定义 API 入口、框架扩展点、通用工具方法
- 外部类必须是 public 才能被其他包 import;一个 .java 文件里最多一个 public 类,且文件名必须与之相同
- 过度使用 public 会破坏封装,应避免将字段直接设为 public
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










