簡體   English   中英

關於訪問外部類的私有成員

[英]Regarding access to private member of outer class

成員內部類可以訪問其外部類的成員(甚至是私有成員)。 但是,包含在方法中的本地內部類沒有。

為什么?

給我的一個原因是,對於 JVM 沒有內部類的概念,它為每個內部類創建頂級類,這就是為什么它們不應該訪問私有成員的原因,但對於它們來說仍然應該如此。

此外,本地內部類實際上可以訪問最終成員。 為什么呢?

這是一個綜合示例,哪些是可訪問的,哪些是不可訪問的:

public class Outer {

    private static String staticOuterField;
    private String outerField;

    public void method() {
        class MethodInner {
            public void methodInnerMethod() {
                System.out.println(staticOuterField); // OK
                System.out.println(outerField); // OK
            }
        }
    }

    public static void staticMethod() {
        class StaticMethodInner {
            public void staticMethodInnerMethod() {
                System.out.println(staticOuterField); // OK
                System.out.println(outerField); // Not accessible
            }
        }
    }

    static class StaticInner {
        public void staticInnerMethod() {
            System.out.println(staticOuterField); // OK
            System.out.println(outerField); // Not accessible
        }
    }

    class Inner {
        public void innerMethod() {
            System.out.println(staticOuterField); // OK
            System.out.println(outerField); // OK
        }
    }
}

外部靜態字段始終可以從內部類訪問。 只有當內部類綁定到外部實例時,外部實例字段才可訪問。 如果內部類是非靜態內部類或在實例方法中聲明的類,就是這種情況。

內部類背后的整個想法是,它們可以完全訪問外部類成員,也可以訪問私有成員。 這使它們與適用一般訪問規則的頂級(非內部)類不同。 final修飾符在這里沒有任何作用。

暫無
暫無

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

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