[英]In Java nested classes, can the enclosing class access private members of inner classes?
[英]Static nested sub-classes of the enclosing type can still refer to the private field members, why?
我找到了一些含糊不清的恕我直言。 假设我们有以下类结构:
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.
}
}
}
protected
和private
变量的访问方式有所不同? 但是,如果嵌套类是非静态内部类,那么情况并非如此? super
允许访问封闭类型的私有成员?
- 为什么静态嵌套类可以自由访问实例成员?
因为B extends A
您没有访问A
的成员变量,您正在访问B
的继承成员变量。
- 为什么保护和私有变量的访问方式有所不同? 但是,如果嵌套类是非静态内部类,那么情况并非如此?
因为私有字段不是继承的,而受保护的字段是; 但是私有字段仍然存在于超类中,并且可以通过super
显示,因为B
嵌套在A
。 可见性修饰符的表达方式不足以表达与通过超级访问相同的内容。
为什么静态嵌套类可以自由访问实例成员?
嵌套类可以访问同一外部类中的所有私有成员。 它们都是一次编译的,并且添加了访问器方法以允许这样做。 注意:hte JVM不允许这样的访问,这就是为什么需要添加访问器方法的原因。
为什么保护和私有变量的访问方式有所不同?
假设受保护成员通过超类访问,因为它们是继承的。 私有字段不是继承的,但可以访问嵌套类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.