从“检查对Java虚拟机中受保护成员的访问”:
令 m 为在类 c 中声明的成员,该类属于包 p 。如果 m 是公共的,则可以由任何类访问(输入)。如果 m 是私有的,则只能由
c 访问。如果 m 具有默认访问权限,则只有属于 p的 任何类都可以访问它。如果 m 受保护,则情况会稍微复杂一些。首先,属于 p 的任何类都可以访问 m ,就好像它具有默认访问权限一样。另外,它可以由属于
p以外 的包的 c 的任何子类 s 访问,但有以下限制:如果 m 不是静态的,则正在访问其成员的对象的类 o 必须为 s
或a。子类 小号 ,写得 Ø ≤ 小号 (如果 米 是静态的,该限制并不适用于: 米 可总是被访问
s )。
我在JLS的6.6.2.1节中找到了该引用,该引用支持有关“正在访问其成员的对象必须是
s 或子类…”的部分。我看不到任何支持static子句的内容,但是根据您自己的示例,这显然是正确的。



