2016-01-07 126 views
-1

請仔細閱讀該代碼編譯罰款:內部類可以訪問外部類的方法從屬性只有

class OuterClass { 

    String a = "A"; 
    String b = "B"; 
    String c = "C"; 


    public static class StaticInnerClass { 

    } 

    public String stringConCat() { 
     return a + b + c; 
    } 
} 

這是我期望的內部類可以訪問外部類的屬性。但現在當我嘗試相同的代碼,而是內在的屬性分配外屬性的系統抱怨:

class OuterClass { 

    String a = "A"; 
    String b = "B"; 
    String c = "C"; 


    public static class StaticInnerClass { 
     String x = a; //this can not be done, why ? 
    } 

    public String stringConCat() { 
     return a + b + c; 
    } 
} 

錯誤/在編譯時警告:非靜態場a不能從靜態上下文引用。

它是因爲在方法stringConCat()你實際上需要一個實例來調用方法(post構造函數調用),以便它允許?而在第二個例子中,沒有真實的實例,所以它將它視爲靜態引用?我看過I thought inner classes could access the outer class variables/methods?,但它仍然沒有下沉。有人可以幫忙嗎?

+0

這裏沒有內在的課堂。 「靜態的內心」是一個矛盾的詞彙。你在這裏有一個靜態*嵌套*類。 – EJP

回答

2

關鍵在於您的錯誤消息:「非靜態字段不能從靜態上下文中引用。」

內部類可以訪問外部類變量,但是您的嵌套類是靜態的,而不是內部的,並且該變量不是靜態的。要麼使變量靜態,要麼使嵌套類非靜態。

+1

哦,我明白你現在說什麼克里斯的好點。我的課是靜態的,即時嘗試訪問不允許的非靜態值,因爲外部類可以有很多實例,並且它不知道給我哪個「a」。不知道爲什麼我從某人那裏得到了一個請求哈哈的讚譽。謝謝一堆。 – j2emanue

+1

'靜態內在'是一個矛盾的詞彙。這是一個靜態嵌套類。 – EJP

相關問題