1. 程式人生 > >Java內部類及其例項化

Java內部類及其例項化

Java 中,允許在一個類(或方法、語句塊)的內部定義另一個類,稱為內部類(Inner Class),有時也稱為巢狀類(Nested Class)內部類和外層封裝它的類之間存在邏輯上的所屬關係,一般只用在定義它的類或語句塊之內,實現一些沒有通用意義的功能邏輯,在外部引用它時必須給出完整的名稱。使用內部類的主要原因有:

· 內部類可以訪問外部類中的資料,包括私有的資料。

· 內部類可以對同一個包中的其他類隱藏起來。

· 當想要定義一個回撥函式且不想編寫大量程式碼時,使用匿名(anonymous)內部類比較便捷。

· 減少類的命名衝突。

請看下面的例子:

1. publicclass Outer {

2. 

privateint size;

3. publicclass Inner {

4. privateint counter =10;

5. publicvoiddoStuff(){

6.             size++;

7. }

8. }

9. publicstaticvoidmain(String args[]){

10.         Outer outer =newOuter();

11.         Inner inner = outer.newInner();

12.         inner.doStuff();

13.         System.out.println(outer.size

);

14.         System.out.println(inner.counter);

15. // 編譯錯誤,外部類不能訪問內部類的變數

16.         System.out.println(counter);

17. }

18. }

這段程式碼定義了一個外部類 Outer,它包含了一個內部類 Inner。將錯誤語句註釋掉,編譯,會生成兩個 .class 檔案:Outer.class 和 Outer$Inner.class。也就是說,內部類會被編譯成獨立的位元組碼檔案。內部類是一種編譯器現象,與虛擬機器無關。編譯器將會把內部類翻譯成用 $ 符號分隔外部類名與內部類名的常規類檔案,而虛擬機器則對此一無所知。

注意:必須先有外部類的物件才能生成內部類的物件,因為內部類需要訪問外部類中的成員變數,成員變數必須例項化才有意義。內部類是 Java 1.1 的新增特性,有些程式設計師認為這是一個值得稱讚的進步,但是內部類的語法很複雜,嚴重破壞了良好的程式碼結構, 違背了Java要比C++更加簡單的設計理念。內部類看似增加了—些優美有趣,實屬沒必要的特性,這是不是也讓Java開始走上了許多語言飽受折磨的毀滅性道路呢?本教程並不打算就這個問題給予一個肯定的答案。

 參考資料:http://www.makeru.com.cn/   

Java學習交流群:587131012