簡體   English   中英

實例化靜態嵌套類

[英]Instantiating static nested classes

這節課

public class Main {

    public static void main(String[] args) {
        Main m = new Main();
        m.new A();
        m.new B();    //1 - compilation error

        new Main.B();
    }

    class A{}
    static class B{}  //2
}

將在第1行導致編譯時錯誤:

Illegal enclosing instance specification for type Main.B

但是我不明白為什么,我發現這有點違反直覺:在第2行,我們有一個靜態的類定義,是否也可以從對象m訪問它?

編輯

如果Main具有靜態變量i ,則mi不會導致編譯錯誤。 為什么行為與類定義不同?

沒有。

靜態內部類的全部要點是它沒有封閉類的實例。

m.new B(); 這是實例化嵌套靜態類的不正確方法,因為B不是Main類的實例變量-因此不需要Main實例來創建它。 而是你可以做

new Main.B();

為清晰起見,引用文檔

靜態嵌套類與它的外部類(和其他類)的實例成員進行交互,就像其他任何頂級類一樣。 實際上,靜態嵌套類在行為上是頂級類,為了包裝方便,該頂級類已嵌套在另一個頂級類中。

暫無
暫無

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

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