嵌套類的語法

嵌套類(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年第一版

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