受保护和无访问修饰符之间的区别

Siy*_*yno 8 java variables protected public

在Java中声明变量时,"protected"和"no access modifier"之间有什么区别?它是一样的吗?

Thi*_*pLV 15

它不一样.

这两个保护没有访问修饰符变量是在同一个包访问,但保护的变量可以通过一个子类的实例任何地方访问(在任何包).


NIN*_*OOP 6

浏览Oracle教程.

如果类没有修饰符(默认值,也称为包私有),则只能在其自己的包中显示

protected修饰符指定只能在其自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问该成员.

Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |   Y   |    Y    |    Y     |   Y
————————————+———————+—————————+——————————+———————
protected   |   Y   |    Y    |    Y     |   N
————————————+———————+—————————+——————————+———————
no modifier |   Y   |    Y    |    N     |   N
————————————+———————+—————————+——————————+———————
private     |   Y   |    N    |    N     |   N
Run Code Online (Sandbox Code Playgroud)

JLS 6.6:

如果成员或构造函数被声明为protected,则只有在满足以下条件之一时才允许访问:

  1. 从包含声明受保护成员或构造函数的类的包中发生对成员或构造函数的访问.

  2. 如第6.6.2节所述,访问是正确的.

我们说存在默认访问权限,只有在声明类型的包内发生访问时才允许访问.