靜態內部類

原文地址:http://blog.csdn.net/yakihappy/archive/2009/03/11/3979858.aspx

如果你不需要內部類對象與其外圍類對象之間有聯繫,那你可以將內部類聲明爲 static 。這通常稱爲嵌套類( nested class )。 Static Nested Class 是被聲明爲靜態( static )的內部類,它可以不依賴於外部類實例被實例化。而通常的內部類需要在外部類實例化後才能實例化。 想要理解 static 應用於內部類時的含義,你就必須記住,普通的內部類對象隱含地保存了一個引用,指向創建它的外圍類對象。然而,當內部類是 static 的時,就不是這樣了。嵌套類意味着:  

1. 嵌套類的對象,並不需要其外圍類的對象。  

2. 不能從嵌套類的對象中訪問非靜態的外圍類對象。  

如下所示代碼爲定義一個靜態嵌套類

 

在靜態嵌套類內部 , 不能訪問外部類的非靜態成員 , 這是由 Java 語法中 " 靜態方法不能直接訪問非靜態成員 " 所限定 . 注意 , 外部類訪問內部類的的成員 有些特別 , 不能直接訪問 , 可以通過內部類實例來訪問 , 這是因爲靜態嵌套內的所有成員和方法默認爲靜態的了 . 同時注意 , 內部靜態類 Person 只在類 StaticTest 範圍內可見 , 若在其它類中引用或初始化 , 均是錯誤的 .
. 靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員。
. 靜態內部類的非靜態成員可以訪問外部類的靜態變量 ,而不可訪問外部類的非靜態變量;

. 非靜態內部類的非靜態成員可以訪問外部類的非靜態變量。

    生成一個靜態內部類不需要外部類成員 :這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成: Outer.Inner in = new Outer.Inner(); 不需要通過生成外部類對象來生成 。這樣實際上使靜態內部類成爲了一個頂級類 ( 正常情況下,你不能在接口內部放置任何代碼,但嵌套類可以作爲接口的一部分,因爲它是 static 的。只是將嵌套類置於接口的命名空間內,這並不違反接口的規則)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章