1 通路内部類的方法
OuterClassName ocn=new OuterClassName()
OuterClassName.InnerClassName in=ocn.new InnerClassName();
如果從外部類的非靜态方法之外的任意位置建立内部類必須用以上方式
2 内部類可以通路其外圍類中的所有成員,還擁有其外部類的所有元素的通路權,之是以這樣是因為當用某一個外部類的對象建立一個内部類對象的時候,此時内部類對象就會捕獲一個指向那個外圍類對象的引用,那麼當你通路外圍類的成員的時候,就是用那個引用來選擇外圍類的成員的。
3 在内部類中生成外部類對象的引用需要用到OuterClassName.this,如果建立的是一個嵌套類(靜态内部類),則不需要對外部類對象的引用
4 當一個内部類繼承或者實作了一個接口或者抽象類或者普通類的時候,在使用new傳回的時候會自動轉為其基類或接口的引用了,且内部類作用域于它所定義的範圍内。
5 匿名内部類的方式,在一個方法中直接new InnerClass{};此時同樣會自動轉型為其基類,它建立了一個繼承名為InnerClass基類的匿名子類。在匿名類中,如果想引用外部定義的對象的時候,該對象必須定義為final類型,但是當對匿名内部類構造器傳遞參數的時候,此時就不必定義為final
Public Content getObject(int x)
{
Returnnew Content(x){};
}
6 匿名内部類可以繼承類,也可以實作類,但是就是不能同時兼備,并且隻允許同時實作一個接口。
7 嵌套類,所謂的嵌套類其實就是靜态内部類,也就是内部類前面加了static修飾符的。嵌套類和普通内部類的差別在于,普通内部類對象隐式的儲存了一個引用,指向了建立它的外圍類對象,而嵌套類建立的時候并不需要外部類的對象,同時它也隻能通路外圍類中的靜态對象,普通内部類内部中不允許出現static修飾符的資料和字段,而嵌套類允許
8 可以在接口中定義内部類,不過此時該内部類就是一個public和static的嵌套類了。
9 内部類的好處,每個内部類都能獨立的繼承自一個接口的實作,它與外部類是否繼承某個接口的實作無關,接口可以解決java中單繼承的問題,而内部類可以有效的實作“多重繼承”,意思就是當外部類需要繼承多個非接口類型的時候,此時就可以利用内部類來實作一些繼承操作。
10 内部類的繼承,必須在繼承中傳遞該内部類的外部類引用,在方法體中定義
outClassName.super(),當覆寫一個有内部類的外部類的時候,即使在子類建立重新定義此内部類,父類與子類的内部類依然是獨立的,各自在自己外部類的命名空間中。
11 局部内部類,一般就是在方法體中定義一個局部内部類,此時該内部類不能有任何通路修飾符,因為它的作用域僅僅在于該方法體内部。但是它可以通路目前代碼塊内的常量和此外圍類的所有成員。
本文轉自 zhao_xiao_long 51CTO部落格,原文連結:http://blog.51cto.com/computerdragon/1197899