封闭类型的静态嵌套子 类 仍然可以引用私有字段成员,为什么?

Static nested sub-classes of the enclosing type can still refer to the private field members, why?

恕我直言,我发现了一些模棱两可的东西。假设我们有以下 class 结构:

public class A
{
    private int privateVar = 1;
    protected int protectedVar = 2;

    static class B extends A
    {
        public int getPrivateVariable()
        {
            return privateVar; //error: Cannot make a static reference to the non-static field memberVariable
        }

        public int getProtectedVariable()
        {
            return protectedVar; //OK: Why?
        }

        public int getPrivateUnfair()
        {
            return super.privateVar; //Why this can be accessed using super which the protected member doesn't require.
        }
    }
}
  1. 为什么静态嵌套 class 可以自由访问 实例 成员?
  2. 为什么访问 protectedprivate 变量的方式不同?但是,如果嵌套 class 是非静态内部 class?
  3. 则情况并非如此

编辑:

  1. 为什么允许关键字super访问封闭类型的私有成员?

Why at all does the static nested class has free access to the instance members?

嵌套 classes 可以访问同一外部 class 中的所有私有成员。它们都是一次编译的,并且添加了访问器方法以允许这样做。注意:hte JVM 不允许这样的访问,这就是为什么需要添加访问器方法的原因。

Why there is a difference in the way protected and private variables can be accessed?

受保护的成员被假定为通过超级 class 访问,因为它们是继承的。私有字段不被继承,但可以为嵌套的 classes 访问。

  1. Why at all does the static nested class has free access to the instance members?

因为B extends A。您不是在访问 A 的成员变量,而是在访问 B.

的继承成员变量
  1. Why there is a difference in the way protected and private variables can be accessed? This however, is not the case if the nested class is non-static inner class?

因为私有字段不会被继承,而受保护的字段会;但是私有字段仍然存在于超类中,并且通过 super 可见,因为 B 嵌套在 A 中。可见性修饰符的表达力不足以表达与通过 super 访问相同的内容。