1. 程式人生 > >Java的內部類(Inner Class)和巢狀類(Nested Class)的區別

Java的內部類(Inner Class)和巢狀類(Nested Class)的區別

內部類是類中類(內部類不為同一包的其他類可見,具有很好的封裝性),分為靜態內部類,成員內部類,區域性內部類以及匿名內部類;區域性內部類寫在方法裡面;用到最多的就是匿名內部類,例子如下:

首先定義一個介面:Interface A{ public void method();}

然後 A a = new A(){public void method{ System.out.println("hehe!");}}

上面表示式等號右邊就是一個匿名內部類,事實上它是一個沒有名稱的介面A的實現類。

1. 靜態的內部類稱為巢狀類,巢狀類不能直接引用外部類的non-static屬性和方法,建立巢狀類物件時不依賴外部類物件;

2. 靜態內部類沒有了指向外部的引用,和C++的巢狀類很相像了,Java內部類和C++巢狀類最大的不用在於是否具有指向外部引用這點;

3. 在任何非靜態內部類中,都不能有靜態資料、靜態方法或者又一個靜態內部類(也就是不止一層),然後靜態內部類可以擁有這一切。