封闭类型的静态嵌套子 类 仍然可以引用私有字段成员,为什么?
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.
}
}
}
- 为什么静态嵌套 class 可以自由访问 实例 成员?
- 为什么访问
protected
和 private
变量的方式不同?但是,如果嵌套 class 是非静态内部 class? 则情况并非如此
编辑:
- 为什么允许关键字
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 访问。
- Why at all does the static nested class has free access to the instance members?
因为B extends A
。您不是在访问 A
的成员变量,而是在访问 B
.
的继承成员变量
- 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 访问相同的内容。
恕我直言,我发现了一些模棱两可的东西。假设我们有以下 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.
}
}
}
- 为什么静态嵌套 class 可以自由访问 实例 成员?
- 为什么访问
protected
和private
变量的方式不同?但是,如果嵌套 class 是非静态内部 class? 则情况并非如此
编辑:
- 为什么允许关键字
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 访问。
- Why at all does the static nested class has free access to the instance members?
因为B extends A
。您不是在访问 A
的成员变量,而是在访问 B
.
- 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 访问相同的内容。