天天看點

java複習(七)内部類内部類

内部類

一般情況下:我們把類定義成獨立的單元。有些情況下,我們把一個類放在另一個類的内部定義,稱為内部類。

内部類的作用:

     1.内部類提供了更好的封裝,隻能讓外部類直接通路,不允許同一個包中的其他類直接通路。

     2.内部類可以直接通路外部類的私有屬性,内部類被當成其外部類的成員。但外部類不能通路内部類的内部屬性。

内部類的使用場合:

    由于内部類提供了更好的封裝特性,并且可以很友善的通路外部類的屬性,是以,通常内部類在隻為所在外部類提供服務的情況下優先使用。

内部類的分類:

1.成員内部類(可以使用private、protected、public 任意進行修飾。并且在class檔案儲存中,檔案名為"外部類$内部類.class")

    a)非靜态内部類(外部類使用非靜态内部類和平時使用其他類沒什麼不同)

        i.非靜态内部類必須寄存在一個外部類對象裡。是以,如果有一個非靜态内部類對象那麼一定存在對應的外部類對象。非靜态内部類對象單獨屬于某個對象。

        ii.非靜态内部類可以使用外部類的成員,但是外部類不能直接通路非靜态内部類成員。

        iii.非靜态内部類不能有靜态方法,靜态屬性,靜态初始化塊。

        iV.靜态成員不能通路非靜态成員,外部類的靜态方法,靜态代碼塊不能通路非靜态内部類,包括不能使用非靜态内部類定義變量,建立執行個體。

       V.内部類的通路: 1.外部類中定義内部類:new InnerClass()

                                    2.外部類以外的地方使用非靜态内部類:

                                             Outer.Inner varname=OuterObject.new Inner();

   b).靜态内部類

       i.當一個靜态内部類對象存在,并不一定存在對應的外部類對象。是以,靜态内部類的執行個體方法不能直接通路外部類的執行個體方法。

       ii.靜态内部類看作外部類的一個靜态成員。是以,外部類的方法中可以通過;靜态内部類.名字    通路靜态内部類的靜态成員。通過new靜态内部類通路靜态内部類的執行個體。

2.匿名内部類

       适合隻使用一次的類。

          文法: new   父類構造器(實參清單) 實作接口(){

                       匿名内部類實體!

  }  

3.方法内部類

      這個用的極少,但是方法裡可以定義類。