java中把一個類定義到另外一個類的內部,稱爲內部類。
內部類常見分爲四種:靜態內部類、成員內部類、局部內部類、匿名內部類。
代碼展示:
public class OuterClass {
//靜態內部類
static class InnerClass1{}
//成員內部類
class InnerClass2{}
public void func(){
//局部內部類
class InnerClass3{}
}
}
public class MyFrame extends Frame {
public MyFrame(){
addWindowListener(new WindowAdapter() { //匿名內部類
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
}
});
}
}
- 靜態內部類
被static關鍵字修飾的內部類。不依賴於外部類實例而被實例化。只能訪問外部類的靜態變量、靜態方法。 - 成員內部類
靜態內部類去掉static,則爲成員內部類。可以自由訪問外部類中的變量、方法而不管是不是靜態的。另外,非靜態內部類不能有靜態的成員。
局部內部類實例化需要先實例化外部類:
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass2 innerClass2 =
outerClass.new InnerClass2();
- 局部內部類
定義在一個代碼塊中的內部類。作用範圍是整個代碼塊。不能被public、protected、private以及static修飾,只能訪問方法中定義爲final類型的局部變量。 - 匿名內部類
一種沒有類名的內部類。不能使用關鍵字class、extends、implements,沒有構造函數,必須繼承其他類或者實現其他接口。
- 匿名內部類沒有構造器
- 不能定義靜態成員、方法、類
- 不能是public、protected、private、static
- 只能創建匿名內部類的一個實例
- 匿名內部類爲局部內部類,因此局部內部類的限制都對其有效。