內容思路來自Java編程思想,個人讀書做的筆記,僅個人復習之用,故他人參考請自行辨別內容是否有錯誤。
在類的類部可以定義類,叫做內部類。如果這個內部類被static修飾,此時內部的類叫做嵌套類。
內部類用在哪里,解決了什么問題?
內部類中一定包含的有外部類的引用,即Outer.this,
故,創建內部類,必須擁有外部類的實例。
-
public class Outer { private String foo = "kitty"; class Inner{ Outer getOuter(){ // 在內部類中,可以通過dot this語法引用外部對象 // 即 Outer.this return Outer.this; } public void bar(){ // 內部類可以訪問外部類的任意屬性 System.out.println(foo); } } public static void main(String[] args) { // 同過外部類dot內部類的方式 聲明一個引用 Outer.Inner inner = null; // 通過外部類實例dot new的方式創建一個內部類的實例 inner = new Outer().new Inner(); } }
-
嵌套類:看一種單例的寫法。
-
public class Singleton { private static Singleton instance = null; private static class Inner{ static{ instance = new Singleton(); } } public static Singleton getInstance(){ return instance; } }
-
其實,單例其他的寫法也有其他的
-
public class Singleton { private Singleton(){} private static class Inner{ private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance(){ return Inner.INSTANCE; } }
-
值得思考的是,為啥會有內部類?內部類的出現解決了啥問題?這一部分需要多讀幾次java編程思想。我還是對這個東西不清不楚。
20190903:
1. 內部類可以理所當然的訪問外部類的成員變量,就好像內部類原本就擁有他們似的;
2. 內部類區別於嵌套類,嵌套類不依賴於外部類,可以單獨被實例化,但是內部類的實例化必須有外部類的實例;
3. 內部類的實例化必須要有外部類的實例,通過外部類實例點new的方式創建內部類實例;
4. 內部類好像可以屏蔽一些細節,外面的類看不到這些細節。同時內部類實現一些接口我繼承一些類從而具有一定的功能,通過這些功能完成對外部類的數據進行操作,
而且,內部類的這些功能,外面的內有看不到,這樣可以避免一些特定的方法或實現被其他代碼調用;
5.內部類中可以通過外部類點this表示外部類的this。入Outer.this,這就是對外部類的引用;
6.現在看來內部類就是為了操作外部類的數據而存在的吧,內部類封裝了一些特定但是很私有的一些功能。
-