隨筆 - 35  文章 - 21  trackbacks - 0
          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          一 概念:

          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 2008-08-13 04:49 lincode 閱讀(866) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 福州市| 莱西市| 六盘水市| 班戈县| 于田县| 长垣县| 宜章县| 留坝县| 丘北县| 大足县| 九江县| 右玉县| 宁远县| 兴隆县| 绥江县| 新绛县| 壤塘县| 霸州市| 泌阳县| 陕西省| 微博| 韶山市| 合水县| 德惠市| 尤溪县| 安化县| 华宁县| 叶城县| 平罗县| 岢岚县| 保定市| 台州市| 葫芦岛市| 新泰市| 哈尔滨市| 汶上县| 富裕县| 柯坪县| 汕尾市| 龙南县| 马公市|