2010-11-02 59 views
8

我有一個Java中的「私有靜態」嵌套類。訪問修飾符對此類中的字段和方法有什麼意義?我已經嘗試了公共和私人,對我的應用程序沒有任何影響。在Java中的私有靜態嵌套類內訪問修飾符

public class MyList<T>{ 
    private static class Node{ // List node 
     private Object item; 
     private Node next; 
     private Node prev; 

     private Node(Node next){ 
      this.next = next; 
     } 

     private static Node doStuff(){} 
    } 
} 
+1

你可以發佈你的代碼以及你的假設嗎? – 2010-11-02 06:05:53

回答

4

兩種嵌套類:1.靜態(嵌套類)和2.非靜態(也稱爲內部類)

現在,外部類,MyList可以訪問的所有成員內部類Node,但是當您想要某些外部類訪問它的限制時,實際上對類Node(嵌套類)的成員使用訪問說明符。

有趣讀取:Source1Source2

10

因爲它是一個嵌套類,在Node一切可以通過MyList<T>被訪問的訪問無論改性劑,;因爲它是一個私有嵌套類,所以中最先聲明的內容在MyList<T>之外將是可見的。

因此,訪問修飾符可能很重要的一種情況是重寫超類方法(例如toString())的方法。您無法減少重寫方法的可見性。 toString()必須始終聲明爲公開類才能編譯。

還應該注意的是,當私有成員被外部類訪問時,編譯器會創建一個合成方法(我相信程序包範圍)。這種合成方法僅在嵌套類的.class文件中可見。

+2

好的答案。我會補充說,內部類的修飾符只有在內部類不是'私人'時才起作用。 – Jorn 2010-11-02 15:12:31

+0

「當外部類訪問私有成員時,編譯器創建一個合成方法」。當僅從外部類訪問靜態嵌套類的'private static'成員時,是否創建合成方法?據推測,所有靜態成員(包括靜態嵌套類的靜態成員)都是在編譯時解析的。 – andrybak 2016-11-23 09:13:27

+0

@andrybak Java編譯器可以識別內部私有成員何時被外部類訪問,無論它是否是靜態的。它只在需要時創建合成訪問器方法。 – ILMTitan 2016-11-23 22:19:34