內部類理解

內部類:
定義:
  定義在另外一個類中的類,就是內部類。
  編譯後生成的兩個獨立的類:Outer.class 和Outer$Inner.class。
  
內部類的分類:
  靜態內部類:靜態內部類定義在類中,任何方法外,用static修飾
   靜態內部類只能訪問外部類的靜態成員。
   在外部類的外部,要創建一個靜態內部類對象不需要外部類對象:
    Outer.Inner in = new Outer.Inner();
   在本類內部生成內部類對象的方式:
    Inner in = new Inner();

  成員內部類:作爲外部類的一個成員存在,與外部類的屬性、方法並列
   在內部類中可以直接訪問外部類的私有屬性。
   內部類和外部類的實例變量允許命名衝突。
    在內部類中訪問實例變量:this.屬性
    在內部類訪問外部類的實例變量:外部類名.this.屬性
   在外部類的外部,要創建一個成員內部類對象,要首先建立一個外部類對象,然後再創建一個成員內部類對象。
    Outer out = new Outer();
    Outer.Inner in = out.new Inner();
   在本類內部生成內部類對象的方式:
    在靜態方法中:Inner in = new Outer().new Inner();
    在非靜態方法中:Inner in = this.new Inner();

 成員內部類不可以有靜態成員,這是因爲靜態屬性是在加載類的時候創建,這個時候內部類還沒有被創建。
   
  局部內部類:在外部類的方法中定義的內部類
   與局部變量類似,在局部內部類前不可以加修飾符public和private,其作用域爲定義它的代碼塊。
   局部內部類不僅可以訪問外部類的實例變量,還可以訪問外部類的局部變量,但要求外部類的局部變量必須爲final的。
   配合接口使用,來做到強制弱耦合。
   在外部類的外部不可創建局部內部類對象,只能在局部內部類所在的方法中創建:
    Inner in = new Inner();
   
  匿名內部類:一種特殊的局部內部類
   沒有名字,也沒有class、extends、implements關鍵字
   用一種隱含的方式實現一個接口或繼承一個類,並且只能創建一次實例。
   實現方式:在某個語句中,new 父類/父接口名字(){ 類體中實現方法 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章