為什麼Java內部類要設計成靜態和非靜態兩種
阿新 • • 發佈:2018-12-09
作者:Paranoid 連結:https://www.zhihu.com/question/28197253/answer/365692360 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
首先,我們需要明白,為什麼要設計Java內部類?然後再去探究為何又將內部類設計為靜態與非靜態兩種。
將一個類設計成內部類,我覺得有兩方面因素:
- 在一個類內部,需要操作某種屬性,而這個屬性需要涉及的面又很廣,我們可以考慮,將這些屬性設計為內部類。
- 然後就如下面XX使用者回答的那樣,好比你設計類 B 的目的只是為了給類 A 使用,那麼,我們就可將其設定為內部類,沒有必要將類 B 設定成單獨的 Java 檔案,防止與其他類產生依賴關係。
然後我們再來說說為什麼又將內部類設計為靜態內部類與內部類:
- 首先來看一下靜態內部類的特點:如XX使用者所述那樣,我是靜態內部類,只不過是想借你的外殼用一下。本身來說,我和你沒有什麼“強依賴”上的關係。沒有你,我也可以建立例項。那麼,在設計內部類的時候我們就可以做出權衡:如果我內部類與你外部類關係不緊密,耦合程度不高,不需要訪問外部類的所有屬性或方法,那麼我就設計成靜態內部類。而且,由於靜態內部類與外部類並不會儲存相互之間的引用,因此在一定程度上,還會節省那麼一點記憶體資源,何樂而不為呢~~
- 既然上面已經說了什麼時候應該用靜態內部類,那麼如果你的需求不符合靜態內部類所提供的一切好處,你就應該考慮使用內部類了。最大的特點就是:你在內部類中需要訪問有關外部類的所有屬性及方法,我知曉你的一切... ...
總結:首先需要知道為什麼會有內部類,什麼時候應該使用內部類,我們再去討論,為什麼 Java 的設計者們又將內部類設計為靜態與非靜態,這樣就很清晰了。