Java 提供 4 种访问控制级别,用于控制类、方法、成员变量、构造器等的访问范围。

四种权限修饰符

修饰符 同类(自己) 同包(包内其他类) 子类(即使不在同包) 其他包
public
protected
无修饰符
private

逐个解释

public

  • 可以被任何类访问
  • 应用场景:API、工具类、公共接口等
public class User {
    public String name;
    public void sayHello() {}
}

protected

  • 同包可以访问
  • 不同包的子类可以访问(继承时)
  • 应用场景:父类想要对子类开放,但不希望其他包随便访问
protected String name;
protected void sayHello() {}

默认

  • 只有同包内的类可以访问
  • 不同包的类无法访问,即使是子类
  • 应用场景:包内工具、包内部类
String name;  // 无修饰符
void sayHello() {}

private

  • 只能在本类内部访问
  • 应用场景:封装数据、内部方法
private String name;
private void sayHello() {}

三、在类、成员、构造器中的应用

成员位置 可用修饰符
顶级类 public、(默认)
成员变量 publicprotected、(默认)、private
方法 同上
构造器 同上
内部类 同上

重点陷阱与注意点

  1. 类只能是 public 或者默认,不能是 protectedprivate否则编译器报错
  2. 内部类可以使用所有修饰符
  3. private 方法不会被子类继承,也不能重写,但可以重新定义同名方法

典型应用场景总结

修饰符 应用场景
public API、工具、对外开放的类和方法
protected 框架内部类、希望子类可以使用但不对外
默认 包内部封装,不希望包外访问
private 完全封装,内部数据、内部逻辑