Flyingis

          Talking and thinking freely !
          Flying in the world of GIS !
          隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0

          導航

          <2005年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          公告

          Flyingis博客空間內所有文章除特別聲明為[轉載],均為作者的學習心得和原創作品。如要轉載,請注明作者名flyingis及原文地址

          聯系方式

          常用鏈接

          留言簿(41)

          我參與的團隊

          隨筆分類

          隨筆檔案

          文章分類

          新聞檔案

          .Net 技術

          Ajax Technology

          Eclipse Technology

          ESRI Technology

          GIS Technology

          Java Technology

          Linux Technology

          Open Source

          個人博客

          精彩博客(技術類)

          精彩博客(非技術)

          搜索

          •  

          積分與排名

          • 積分 - 661666
          • 排名 - 72

          最新評論

          閱讀排行榜

          評論排行榜

          理解Java內部類的基本特性(二)

          作者:Flyingis

          4. 
          內部類擁有其外圍類的所有元素的訪問權,當某個外圍類的對象創建了一個內部類對象時,此內部類對象必定會保存一個指向那個外圍類對象的引用。然后,在訪問此外圍類的成員時,就是用那個“隱藏”的引用來選擇外圍類的成員。這與C++嵌套類的設計非常不同,在C++中只是單純的名字隱藏機制,與外圍對象沒有聯系,也沒有隱含的訪問權。

                   另外,一個內部類被嵌套多少層并不重要,它能透明訪問所有它所嵌入的外圍類的所有成員。

          5.  Java中實現C++的嵌套類功能也是通過嵌套類的機制來實現的,區別是C++中的嵌套類不能訪問私有成員,在Java中則可以。

                   Java中,使用嵌套類可以使得內部類對象與其外圍類對象之間有聯系,語法上是將內部類聲明為static。而在普通的內部類中是不能有static數據、static字段和嵌套類的。通常,我們可以在一個普通的內部類中,通過一個特殊的this引用鏈接到其外圍類對象,如外圍類是Fruit,那么在內部類中應該通過Fruit.this來引用外圍類的對象。

          6.  內部類的繼承比較特殊,我通過一個例子來向大家展示:

          class Fruit {

            class Inner {}

          }

          public class Apple extends Fruit.Inner {

            Apple(Fruit f) {

              f.super(); //為什么要這樣使用我也不明白

          }

          public static void main(String[] args) {

            Fruit f = new Fruit();

            Apple a = new Apple(f);

          }

          }

                   其中為什么要外圍類調用super()方法我也不清楚,希望有人指點!

          7.  當繼承某個外圍類的時候,內部類并沒有發生任何改變,基類和繼承類中的兩個內部類是完全獨立的實體,各自在自己的命名空間內。如果明確繼承某個內部類,則會覆蓋原來的內部類。如:

          public class A extends Atop {

            public Inner extends Atop.Inner {}

          }

          8.  局部內部類和匿名內部類在功能上基本相似,它們的區別在于,如果我們需要一個已命名的構造器,或者需要重載構造器,就要使用局部內部類,它可以提供多個內部類對象。匿名內部類只能用于實例初始化。

          9.  內部類標識符是外圍類的名字+$+內部類的名字,如果內部類是匿名的,則會由編譯器產生一個數字作為其標識符。

          posted on 2005-11-04 18:55 Flyingis 閱讀(1977) 評論(4)  編輯  收藏 所屬分類: JavaSE

          評論

          # re: 理解Java內部類的基本特性(二)[原創]  回復  更多評論   

          其中為什么要外圍類調用super()方法?
          這個問題,think in java上有解釋,
          在第八章:接口和內隱類 ——繼承inner classes
          你可以去看看
          2005-11-05 12:06 | allen

          # re: 理解Java內部類的基本特性(二)[原創]  回復  更多評論   

          內部類從運行時理解更簡單:
          只要不是 static 聲明的內部類運行時,實例必定附著于一個外部類實例,而不能單獨創建。
          但是 static 內部類的運行時表現相同于外部類。
          2005-12-13 11:23 | 笨笨

          # re: 理解Java內部類的基本特性(二)[原創]  回復  更多評論   

          文章中第六點我還是沒有弄明白。為什么一定要聲明調用基類的默認構造方法?
          2005-12-13 12:28 | Flyingis

          # re: 理解Java內部類的基本特性(二)  回復  更多評論   

          不錯過西
          2005-12-30 17:32 | 南木林
          主站蜘蛛池模板: 通河县| 收藏| 牡丹江市| 葵青区| 鄢陵县| 横峰县| 阳泉市| 杭锦后旗| 梅州市| 博罗县| 惠州市| 都兰县| 门头沟区| 乌兰察布市| 会泽县| 历史| 固原市| 香河县| 盖州市| 运城市| 清河县| 扎赉特旗| 柳河县| 灵石县| 荃湾区| 临沭县| 浙江省| 区。| 江门市| 田阳县| 锡林浩特市| 宣武区| 芦溪县| 深州市| 云霄县| 景洪市| 丰县| 正阳县| 白河县| 沽源县| 大连市|