簡體   English   中英

封閉類型的靜態嵌套子類仍然可以引用私有字段成員,為什么?

[英]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.
        }
    }
}
  1. 為什么靜態嵌套類可以自由訪問實例成員?
  2. 為什么protectedprivate變量的訪問方式有所不同? 但是,如果嵌套類是非靜態內部類,那么情況並非如此?

編輯:

  1. 為什么關鍵字super允許訪問封閉類型的私有成員?
  1. 為什么靜態嵌套類可以自由訪問實例成員?

因為B extends A 您沒有訪問A的成員變量,您正在訪問B的繼承成員變量。

  1. 為什么保護和私有變量的訪問方式有所不同? 但是,如果嵌套類是非靜態內部類,那么情況並非如此?

因為私有字段不是繼承的,而受保護的字段是; 但是私有字段仍然存在於超類中,並且可以通過super顯示,因為B嵌套在A 可見性修飾符的表達方式不足以表達與通過超級訪問相同的內容。

為什么靜態嵌套類可以自由訪問實例成員?

嵌套類可以訪問同一外部類中的所有私有成員。 它們都是一次編譯的,並且添加了訪問器方法以允許這樣做。 注意:hte JVM不允許這樣的訪問,這就是為什么需要添加訪問器方法的原因。

為什么保護和私有變量的訪問方式有所不同?

假設受保護成員通過超類訪問,因為它們是繼承的。 私有字段不是繼承的,但可以訪問嵌套類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM