1.內部類定義:可以將乙個類的定義放在另乙個類或者介面的定義內部.
2.內部類分類:
3.內部類與外部類的通訊
3.1 對於平凡的內部類 :
形如
class outter
;void g(){};
class inner
}}
從inner類內部可訪問outter類的任何域和方法.通常平凡的內部類儲存了乙個對外部類的物件的引用.
3.2 對於巢狀類:
形如
class outter
}
從inner類內部可訪問outter類的靜態域和靜態方法,巢狀類並沒儲存對外部類的物件的引用.
3.3 匿名內部類: 同平凡的內部類
3.4 區域性內部類:同平凡的內部類,並且其可以訪問包含其的外部類的方法體內定義的區域性變數.
4.內部類的訪問限制
4.1 對於平凡的內部類:其可能有四種類型別:public , protected , 包作用域 , private
除了private外,其他的三種型別的內部類都分別可以在不同的作用域被訪問,若要構造乙個內部類的例項
outter outter = new outter();//首先要生成乙個外部類的引用
outter.inner inner = outter.new inner();
注意兩點;
對於private型別的平凡的內部類,可以通過工廠方式返回其引用,形式如下:
//step1:定義乙個介面或類
inte***ce x
class outter;};
public static inner getinner() }
//step2:獲得內部類引用
x x = outter.getinner();
平凡的內部類內部不能包含靜態的域和方法.
4.2 匿名內部類
4.2.1 無引數匿名內部類
class outter
;};//注意此處需要加分號,否則給出編譯時錯誤}}
4.2.2 有引數匿名內部類//@exzample 1: final--needed;
class outter;
};//注意此處需要加分號,否則給出編譯時錯誤}}
//@exzample 2: final--neededn't;
abstract base
abstract void f();
}class outter
}}
在匿名內部不用使用建構函式,不過可以使用例項初始化,形如class outter
void xx(){};
};//注意此處需要加分號,否則給出編譯時錯誤}}
4.3 區域性內部類: 與匿名內部類類似
5. 對於平凡內部類,生成的.class檔案形如: 外部類名$內部類名.class
對於匿名內部類,生成的.class檔案形如: 外部類名$x.class (其中x = 1,2 ,3....n)
對於區域性內部類,生成的.class檔案形如: 外部類名$x.內部類名.class
內部類總結
1內部類的巢狀可以理解成類的鏈關係,在構造乙個內部類 非static 的例項的時候,會將直接外層類的例項 作為引數傳進建構函式,而外層類的例項也是用其外層類的例項構造,所以是一種鏈狀關係,內部的類可以使用所有 外層的類的例項,而外層的類不能使用內層的類,應用a.this 最外層類例項 a.b.c.t...
內部類總結
內部類不是很好理解,但說白了其實也就是乙個類中還包含著另外乙個類 如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中...
內部類總結
內部類不是很好理解,但說白了其實也就是乙個類中還包含著另外乙個類 如同乙個人是由大腦 肢體 器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟 它也有自己的屬性和行為 血液 跳動 顯然,此處不能單方面用屬性或者方法表示乙個心臟,而需要乙個類 而心臟又在人體當中,正如同是內部類在外部內當中...