2017-10-28 97 views
0
public class InnerTest { 

    public static void main(String arg[]) { 
     A.B.print(); 
    } 
} 

class A { 
    static class B { 
     static void print() { 
      System.out.println("Hello"); 
     } 
    } 
} 

我如何使用類名,雖然A類也不是一成不變的如何非靜態內部類可以使用外部類的名字

+0

爲什麼你認爲'class A'應該是'static'? –

回答

0

static關鍵字用於修改一個類的成員。當成員使用static進行修改時,可以使用封閉類的名稱直接訪問它,而不是像使用非靜態成員那樣使用封閉類的實例。

內部類下面Inner是類Outer的成員:

class Outer { 
    static class Inner {} 
} 

因此,Inner可以這樣獲得:

Outer.Inner 

Outer不需要/不能被修改由static,因爲它不是一個類的成員。它是全球範圍內存在的一類。要訪問它,你只需要輸入它的名字 - Outer。它沒有意義,因爲它沒有封閉類,所以它是非靜態的。如果它是非靜態的,你應該如何訪問它?

0

要使用正確的術語,B類不是內部類;它是一個靜態嵌套類。有關各種嵌套類的定義,請參見https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

重要的關鍵字是在B類定義前面的static關鍵字。A類是否是靜態的並不重要。事實上,把static放在A類定義的前面是沒有意義的。

由於B類被聲明爲靜態的,它沒有一個參考保持到A級的實例

1

還有一個方面是如何來解釋這一點:

class本身不是staticnon static它是隻是一個class

無論如何,您可以使用static關鍵字只有class成員。如果您想嘗試聲明InnerTeststatic你將有一個錯誤可能看起來像這樣的(因此,假設它不是靜態的嵌套類爲其他類)

該類InnerTest非法修改;只有公開,抽象& 最終被允許

static嵌套class可以作爲一個問題,因爲它不需要訪問的InnerTest任何實例成員。換句話說,它可以訪問static成員,只有那些成員。

如果需要訪問non static成員,那麼它不可能是static,並且調用的方式將如new InnerTest().new B()

相關問題