[英]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.