1. 程式人生 > >內部類(innerclasses)

內部類(innerclasses)

內部類

  --把一個類放在另一個類的內部定義,稱為內部類。

內部類的作用:

  --內部類提供了更好的封裝。只能讓外部類直接訪問,不允許同一個包中的其他類直接訪問。

  --內部類可以直接訪問外部類的私有屬性,內部類被當成其外部類的成員。 但外部類不能訪問內部類的內部屬性。

  --由於內部類提供了更好的封裝特性,並且可以很方便的訪問外部類的屬性。所以,通常內部類在只為所在外部類提供服務的情況下優先使用。

內部類的分類:

  --成員內部類(可以使用private、proteted、public任意進行修飾。 類檔案:外部類$內部類.class)

    --非靜態內部類

(外部類裡使用非靜態內部類和平時使用其他類沒什麼不同)

1、非靜態內部類必須寄存在一個外部類物件裡。因此,如果有一個非靜態內部類物件那麼一定存在對應的外部類物件。 非靜態內部類物件單獨屬於外部類的某個物件。
2、非靜態內部類可以使用外部類的成員,但是外部類不能直接訪問非靜態內部類成員。
3、非靜態內部類不能有靜態方法、靜態屬性、靜態初始化塊。
4、靜態成員不能訪問非靜態成員:外部類的靜態方法、靜態程式碼塊不能訪問非靜態內部類,包括不能使用非靜態內部類定義變數、建立例項。

5、成員變數訪問要點:

  --內部類裡方法的區域性變數:變數名

  --內部類屬性:this.變數名

  --外部類屬性:外部類名.this.變數名

6、內部類的訪問:

  --外部類中定義內部類:  new InnerClass()

  --外部類以外的地方使用非靜態內部類:Outer.inner  varname = OuterObject.new Inner()

    --靜態內部類

定義方式:

  static  class   ClassName {

    //類體

  }

使用要點:

  --當一個靜態內部類物件存在,並不一定存在對應的外部類物件。 因此,靜態內部類的例項方法不能直接訪問外部類的例項方法。

  --靜態內部類看做外部類的一個靜態成員。 因此,外部類的方法中可以通過:靜態內部類.名字  訪問靜態內部類的靜態成員。通過 new 靜態內部類()訪問靜態內部類的例項。

  --在外部類的外面建立靜態內部類

  A.B  aInner = new A.B();

  --匿名內部類

    --適合那種只需要使用一次的類。比如:鍵盤監聽操作等等。

    語法:

      new  父類構造器(實參類表) 實現介面 () {

        //匿名內部類類體

      } 

  --區域性內部類

    --定義在方法內部。作用域只限於本方法。用的非常少。