嵌套類(nested class)是java類的嵌套形式,一個類可以在另一個類中定義,例如:
class OuterClass{
...
class NestedClass{
...
}
}
嵌套類與外部類的成員是同等地位的,所以嵌套類就有4種級別的訪問權限(與變量一樣),而外部類只有public與friendly兩種訪問權限。使用嵌套類可以提高代碼的可讀性和可維護性,增強封裝性,並增加類之間的邏輯關係。
嵌套類有靜態的和非靜態的兩種,後者又叫內部類。內部類裏又有兩種特別形式,一種在方法體內定義的,稱爲局部內部類,一種是在方法體內定義的沒有類名的內部類,稱爲匿名內部類。
下面就四種嵌套類舉例:
1,靜態嵌套類:靜態嵌套類在外部類定義成員的地方定義,靜態嵌套類可以定義自己的靜態成員,只能訪問外部類的靜態成員,外部類要訪問靜態嵌套類只能通過類名。
class OuterClass{
...
//定義靜態嵌套類
static class StaticNestedClass{
...
}
public static void main(String[] args){
//創建靜態嵌套類的語法
OuterClass.StaticNestedClass = new OuterClass.StaticNestedClass();
}
}
2,內部類:內部類是非靜態的嵌套類,不能定義自己的靜態成員,內部類對象可以直接訪問外部類的成員變量和方法。
class OuterClass{
...
//定義內部類,即非靜態嵌套類
static class InnerClass{
...
}
public static void main(String[] args){
//創建內部類的語法:先創建外部類對象,在通過該對象創建內部類對象
OuterClass outerClass = new OuterClass();
outerClass.IneerClass = outerClass.new InnerClass();
}
}
3,局部內部類:不在外部類定義成員的地方定義,而是在某個方法體中定義(屬於內部類的一種)。局部內部類不能再myMethod()方法外訪問,所以更加隱蔽。
class OuterClass{
...
void myMethod(){ //包含局內內部類的方法
//定義局部內部類
static class InnerClass{
...
}
//創建局部內部類
InnerClass innerClass = new InnerClass();
}
}
4,匿名內部類(內部類的一種):匿名內部類比局部內部類更加隱蔽,它連名字都沒有。匿名內部類可以用來繼承一個類或者實現一個接口,但不能同時實現這兩種功能。
class OuterClass{
...
//定義匿名內部類
public Abc abc(){ //類定義開始
return new Abc(){
private int x = 1;
public int add(){
return ++x;
}; //類定義結束
}
}
}
匿名內部類簡單點理解:就是通過在定義的時候直接實例化去除了定義的名稱。
本文是我在學習了《Java技術及其應用》之後,自己結合書本寫下來的心得體會,如果有錯的地方,請多多交流。
參考資料:《Java技術及其應用》 清華大學出版社 2009年第一版