2009-10-11 39 views
2

請重新標記這個問題,包括與它相關的什麼時候應該使用嵌套類的示例?

所以我的Java書對嵌套類一整章的語言,但你應該只有真正使用它們的音符結束了,當說到「造型組成關係和實現你想隱藏的課程的內部「。所以讓我們來討論一下你想要使用嵌套類和一些例子。

+0

備註:有一篇關於Sun對微軟引入MS Java代表的迴應的有趣文章(無鏈接,抱歉)。它的要點是嵌套班比代表做得更好。這是導致Sun起訴MS並最終導致.Net和C#的問題之一...(我想這也總結了我關於嵌套類的感受 - 沒有什麼好的可以從他們中誕生出來。:-)) – 2009-10-11 00:46:25

+0

可能的重複[爲什麼/什麼時候應該在.net中使用嵌套類?或者你不應該?](http://stackoverflow.com/questions/48872/why-when-should-you-use-nested-classes-in-net-or-shouldnt-you) – nawfal 2013-04-18 20:46:32

回答

3

嵌套/內部類只是一個專門用於另一個類的上下文的類,它沒有它自己的類文件。如果它鏈接到一個實例,它只能在父類實例的上下文中實例化;它可以看到私人數據,或者只有私人靜態數據,如果它是靜態類。

Java開發者站點有一個嵌套類教程一個示例: http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html

使用的幾個例子:

  • 隱藏的具體實現的 接口的:

(考慮像Hibernate這樣的工具的數據庫會話):假設你有一個Session接口,並且SessionFactory返回一個Sessio的實例ñ。實現Session接口的SessionImpl具體類可以是知道如何構建和初始化它的工廠的內部類。

  • 供應信息通過實現 接口:

在檢票Web框架,各GUI部件具有相關聯的「模型」,其任務是將數據線連接到組件。界面如下所示:

public interface IModel extends IDetachable { 
public Object getObject(); 
public Object setObject(); 
} 

假設您有一些特殊的邏輯來檢索您編寫的自定義GUI組件的數據。由於沒有其他組件以相同的方式檢索數據,因此可以在提供IModel的位置使用匿名類來處理數據檢索。如果你需要重用你的IModel實現的同一個類中有另一個點,你可以把它作爲一個內部類。之後,如果您需要其他模型,則可以將其轉換爲頂級類。

通常,在需要類定義的情況下使用內部類,但該類僅在父類的上下文中可用或者僅有意義。

3

我對嵌套類的實際使用情況是在全局設置對象中。

父類是一個Singleton,嵌套類作爲設置類別。

  • 設置
    • 文件設置
    • 打印設置
    • 等等

有在做內部對象作爲單獨的類,因爲它們是沒有真正的點在設置類範圍之外不使用它們。

2

我使用嵌套類來封裝算法,這些算法通常會作爲一個有很多參數的方法來完成。我使用具有原始數據的類,並將算法放入嵌套類的單獨文件中(使用partial關鍵字)。通過這種方式,我可以在算法完成後爲該算法和其(工作)數據生成屬性。 我知道,沒有嵌套類可以很容易地完成,但這種感覺是正確的,因爲算法是故意爲父類構建的。

public partial class Network 
    { 
      partial void initFDLF() 
      { 
       fdlf=new FDLF(this); 
      } 

     public FDLF fdlf; 
     public class FDLF 
     { 
      internal bool changed=true; 
      internal bool pvchange=true; 
      public double epsilon = 0.001; 
      public bool fdlfOk=false; 
      public void init(){...} 
      public void run(){...} 
      ... 
+0

這個問題有一個「語言不可知「標籤,部分類只存在於.net中 – 2014-03-08 23:56:51

相關問題