簡體   English   中英

內部 class 中頂級 class 成員的可訪問性?

[英]Accessibility of members of top level class in inner class?

我有一個關於從內部 class 訪問頂級 class 的查詢。 我剛剛閱讀了本地或匿名內部類只能訪問最終變量的原因。原因是 JVM 將這兩個類作為完全不同的類處理,因此,如果一個 class 中的變量值發生變化,則無法在運行時反映出來時間在另一個 class 文件中。

Then, my question is that how an inner member class (non-static) can have access to members to members of top level class, as JVM is still treating these two classes as different class files? 如果頂級 class 的成員變量的值發生變化,如何在運行時反映在內部 class 的 class 文件中?

它們是單獨的類,但在“內部”class 中隱含了對“外部”class 實例的引用。 它基本上充當一個變量,您可以隱式或通過ContainingClassname.this的特殊語法獲得它。

請注意,如果您想要這樣的隱式引用,則應將嵌套的 class 聲明為static

public class Outer
{
    private class Inner
    {
        // There's an implicit reference to an instance of Outer in here.
        // For example:
        // Outer outer = Outer.this;
    }

    private static class Nested
    {
        // There's no implicit reference to an instance of Outer here.
    }
}

this隱含地是最終的,你不能改變它。 當你寫一些像

class Outer {
    int a;
    class Inner {
       { a = 1; }
    }
}

你實際上寫的是一樣的

class Outer {
    int a;
    class Inner {
       { Outer.this.a = 1; }
    }
}

a不是最終的,但Outer.this是,這是使用的參考。

暫無
暫無

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

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