嵌套類的學習
當static還有final還有內部類都攪和在一起就蒙了,所以學習之後分享一下自己的筆記。
看過一些大佬寫的筆記,感覺還是挺有用的,在此分享一下:
static:
- static:加載類的時候,會給static分配一個地址,可以通過類名直接訪問
- 非static 每創建一個實例就給他分配一次內存。
final:
- final可以修飾類,這樣的類不能被繼承。
- final可以修飾方法,可以繼承,但是這樣的方法不能被重寫。
嵌套類有兩種類型:靜態的和非靜態的,靜態的嵌套類是應用了static修飾符的嵌套類,因爲是靜態的,所以只能通過對象訪問包含類的非靜態成員。也就是說,嵌套類不能直接引用包含類的非靜態成員。因爲這條限制,所以很少使用靜態的嵌套類。
嵌套類最重要的類型是內部類,內部類是非靜態的嵌套類,可以訪問外部類的所有變量和方法,並且可以直接引用它們,引用方式與外部類的其他非靜態成員使用的方式相同。
內部類可以訪問外部類的所有成員,但是反過來不可以。內部類的成員只有在內部類的作用域內纔是已知的,並且外部類不能使用。內部類中的屬性和方法即使是外部類也不能直接訪問,相反內部類可以直接訪問外部類的屬性和方法,即使private。這是因爲在創建外部類時,內部類會自動捕獲一個外部類的引用,所以內部類可以訪問外部類元素。
匿名內部類:
- 匿名內部類是沒有訪問修飾符的。
- 匿名內部類必須繼承一個抽象類或者實現一個接口
- 匿名內部類中不能存在任何靜態成員或方法
- 匿名內部類是沒有構造方法的,因爲它沒有類名。
靜態內部類:
- 靜態內部類的創建不需要依靠外部類,可以直接創建
- 靜態內部類只能訪問外部類的靜態成員變量和方法,不能訪問外部類的非靜態成員變量和方法
- 非靜態內部類中可以調用外部類的任何成員,不管是靜態的還是非靜態的