敬的世界

          常用鏈接

          統計

          最新評論

          嵌套類和內部類

          ?來自: http://www.aygfsteel.com/lincode/archive/2008/08/13/221594.html

          一 概念:

          Java將嵌套類分成兩個主要的分類:靜態嵌套類(static nested classes)和內部類(inner classes)。

          1 嵌套類(nested classes),在一個類內部定義的另一個類,稱為嵌套類。
          ? 嵌套類分為兩種, static 修飾的 靜態嵌套類, 和無 static 修飾的 非靜態嵌套類,也叫作 內部類。

          2 內部類(inner classes), 無 static 修飾的 非靜態嵌套類。

          Java還進一步將內部類分為:

          實例內部類(instance inner class) ,假設在聲明嵌套類時,沒有在前面加上static關鍵字。這樣得到的是個實例內部類。靜態嵌套類只能夠訪問外部類的static成員,而實例內部類能夠同時訪問static和實例成員。

          本地內部類(local inner class),Java允許在任意的代碼段中放入一個類,該類的代碼放在一對大括號中{? }。這意味著類能夠出現在一個方法中,甚至是在if語句的一對括號中。這樣的類就稱為本地內部類。相對于實例內部類來說,本地內部類和有一個好處。他除了能夠訪問外部類的實例和類字段外(稱為實例和類方法),還能夠訪問本地變量和方法的參數。

          匿名內部類(and anonymous inner class),沒有給出類名的內部類為匿名內部類。

          二 使用:

          1. 訪問內部類:

          我們可以在嵌套類(包括靜態的和非靜態的 )前加上 private,protected 或 public 關鍵字,以指示該類在外部類以外的訪問級別。

          具體訪問方法如下:
          (1).內部類,要以如下形式訪問, outclass 是 OutClass 的一個實例,它放在 new 前指示內部類的實例是屬于一個特定的外部類的實例的。 這是因為,只有外部類的實例存在,他的實例內部類( 也就是非靜態內部類)才能存在。

          ?? //
          innerclass
          ? OutClass?outclass? = ? new
          ?OutClass();
          ?

          ??OutClass.InnerClass?innerclass? = ?outclass. new ?InnerClass();
          ??innerclass.normalMethod();


          (2).靜態嵌套類, 可以用 OutClass.StaticInnerClass 來指示。
          靜態嵌套類,可以有實例成員(實例方法 和 實例變量)
          訪問靜態嵌套類的實例域,需要先實例化靜態嵌套類。
          這個類是靜態的,它不依賴于它外部類的某個實例,所以無須先實例化外部類。這和內部類是不一樣的。

          ? OutClass.StaticInnerClass?staticinnerclass?=?new
          ?OutClass.StaticInnerClass();
          ??staticinnerclass.normalMethod();


          (3).靜態嵌套類的靜態方法,可以用 OutClass.StaticInnerClass.staticMethod() 來訪問。

          實例代碼:
          // ?OutClass.java
          public ? class ?OutClass?{

          ????
          // non static inner classes

          ???? class ?InnerClass{
          ????
          ????????
          public ? void
          ?normalMethod(){
          ????????????System.out.println(
          " ?success: non-static innerclass "
          );
          ????????}
          ????}
          ????
          ????
          // static inner classes

          ???? static ? class ?StaticInnerClass
          ????{
          ????????
          // non?static?method of static inner classes

          ???????? public ? void ?normalMethod()
          ????????{
          ????????????System.out.println(
          " ?success:?non?static?method of?static?innerclas "
          );
          ????????}
          ????????
          ????????
          // ?static?methode?of static inner classes

          ???????? static ? public ? void ?staticMethod()
          ????????{
          ????????????System.out.println(
          " ?success:?static?method of?static?innerclass "
          );
          ????????}
          ????}
          }
          // end of InnerClass

          // ?Test.java
          public ? class ?Test?{

          public ? static ? void
          ?main(String[]?args){

          ??OutClass?outclass?
          = ? new
          ?OutClass();
          ??
          ??
          // ?innerclass

          ??OutClass.InnerClass?innerclass? = ?outclass. new ?InnerClass();
          ??innerclass.normalMethod();
          ??
          ??
          // ?non?static?method of?static?innerclas

          ??OutClass.StaticInnerClass?staticinnerclass? = ? new ?OutClass.StaticInnerClass();
          ??staticinnerclass.normalMethod();

          ??
          // ?static?method of?static?innerclass

          ??OutClass.StaticInnerClass.staticMethod();?
          ??}
          }
          //
          end of Test

          2. 嵌套類 訪問 外部類的成員:

          (1). 外部類對于內部類(非靜態嵌套類)是透明的。包括外部類的private成員,其內部類都可以自由訪問。

          (2). 一個靜態嵌套類只能訪問外部類的靜態方法,它是不能訪問任何外部類的實例成員(包括變量和方法)。

          (3). 內部類中的 this 是指內部類本身。內部類的成員和外部類的成員名沖突,內部類內,沖突的成員名是指內部類成員。
          要調用外部類的沖突的成員,要以 外部類的類名 指示:對于沖突的變量 OutClass.conflitName? 對于沖突的方法 OutClass.conflitName()。

          posted on 2009-10-14 23:26 picture talk 閱讀(281) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 抚宁县| 吴桥县| 衡水市| 丹棱县| 苍溪县| 恩施市| 廊坊市| 资中县| 林甸县| 义乌市| 石台县| 永丰县| 公安县| 衡阳县| 玉门市| 张掖市| 腾冲县| 乐都县| 湛江市| 泌阳县| 永康市| 台北县| 来凤县| 吉林市| 托里县| 南溪县| 大丰市| 武功县| 南阳市| 珲春市| 兴海县| 抚松县| 平度市| 江孜县| 鹿泉市| 杭锦旗| 凤阳县| 聊城市| 莱西市| 宁乡县| 荆州市|