將一個類定義置入另外一個類定義中就叫做「內部類」
特色:內部類做爲外部類的成員,能夠直接訪問外部類的成員(包括private成員),反之則不行。
內部類作爲外部類成員,可聲明爲private、默認、protected或public。
內部類成員只有在內部類的範圍以內是有效的。
用內部類定義在外部類中不可訪問的屬性。這樣就在外部類中實現了比外部類的private還要小的訪問權限。
編譯後生成兩個類: OuterClass.class 和OuterClass$InnerClass.classthis
內部類分類:
成員內部類 靜態內部類 方法內部類 匿名內部類
1.成員內部類
當內部類的成員和外部類的成員重名的時候,在內部類默認使用內部類的成員
若是在內部類想要使用外部類的重名成員,須要用 外部類名.this.成員名
外部類的成員方法能夠直接使用內部類
其餘類不能直接訪問內部類,只能間接方法,建立外部類的對象,再建立內部類的對象,才能使用內部類
2.靜態內部類
在內部類前加static 就是靜態內部類、若是內部類中的屬性或方法是static,則這個內部類必須是static
靜態內部類只能使用外部類的靜態成員,不能使用外部類的非靜態成員,靜態的內容都是屬於類全部,能夠經過類名直接調用。因此靜態的內部類也是屬於類全部,能夠直接用外部類的類名來調用,來建立對象。
3.方法內部類
將內部類定義在外部類的方法中
方法內部類不能在外部類的方法之外的地方使用,方法內部類不能使用訪問控制符和static修飾
方法內部類若是想使用方法的參數,那麼參數前必須加final關鍵字
方法中的內部類 只能在方法內使用,出了方法就不能再使用方法中的內部類了,因此要想使用內部類 就必須在方法結束以前使用內部來建立一個對象 ,使用內部類的對象來調用內部類的方法。
4. 匿名內部類
沒有名字的內部類
匿名內部類有個前提條件:必須存在繼承和實現關係
適合只須要使用一次的類
當一個接口的實現類只須要使用一次,這時候能夠直接用接口來new對象。接口不能直接建立對象,因此在new對象以前,先將接口實現成一個實現類,再用該實現類去建立對象對象