![](/img/trans.png)
[英]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.