2013-02-18 59 views
-1

我正在處理雙端隊列的實現。我有一個Deque類,它有一個內部類節點來表示列表中的項目。我聲明中的Deque(本身就是一個公共類)類是這樣的:從單獨的類訪問內部類

public class Node(){ 
// 
} 

現在創建基本的對象創建語法新節點是deque的類本身很簡單:

Node newNode = newNode(arg1); 

不過,我想能夠從單獨的類中聲明新節點,這是一個提供單元測試的DequeTest類。當我嘗試使用上面的語法創建一個新節點時,出現一個錯誤,指出Node類不可見。我正在開發一個預定義的API,所以我不能創建任何新的公共方法。返回新節點的私有createNode()方法是否最優?即使這似乎是行不通的,因爲編譯器甚至在使用Node關鍵字時會拋出錯誤。

+2

內部類不是靜態的,所以你需要一個外部類的實例。你嘗試過'新的Deque()。new Node();'? – toniedzwiedz 2013-02-18 00:18:53

+0

只需將內部類設爲靜態:http://stackoverflow.com/questions/1353309/java-static-vs-non-static-inner-class – 2013-02-18 00:21:01

+0

您是否嘗試過http://docs.oracle.com/javase/tutorial /java/javaOO/nested.html? – djechlin 2013-02-18 00:36:23

回答

0

不可能。這是製作內部課程的重點:僅限於家長。你爲什麼想要?如果你在其他地方使用Node,首先它不應該是內部類,因爲它不屬於任何一個類。您可能會考慮製作一個公共的Node類,然後從Node中創建單獨的內部類子類。
參見:here API文檔。

+3

你讀過你鏈接到的文章嗎?只要它引用外部類的實例,就可以獲得內部類的實例。換句話說,要創建一個內部類的實例,你需要一個外部類的實例。此外,術語* parent class *作爲* superclass *的不同名稱存在,它與外部類無關。 – toniedzwiedz 2013-02-18 00:32:09