匿名內部類


匿名內部類也就是沒有名字的內部類
使用匿名內部類有個前提條件:必須繼承一個父類或實現一個接口。
例1:不使用匿名內部類來實現抽象方法

可以看到,我們用Child繼承了Person類,然后實現了Child的一個實例,將其向上轉型為Person類的引用。

例2:匿名內部類的基本實現

例3:在接口上使用匿名內部類

匿名內部類最常用的情況就是在多線程的實現上,因為要實現多線程必須繼承Thread類或者實現Runnable接口。

例4:Thread類的匿名內部類實現

例5:Runnable接口的匿名內部類實現

在使用匿名內部類時,要記住以下幾個原則:
 · 匿名內部類不能有構造方法。 (因為匿名內部類是沒有類名的)
 · 匿名內部類不能定義任何靜態成員、方法和類。
 · 匿名內部類不能是抽象類。(因為在創建匿名內部類的時候,會立即創建匿名內部類的對象。從而也可知匿名內部類必須實現它的抽象父類或者接口里包含的所有抽象方法)
 · 匿名內部類不能是public,protected,private,static。
 · 只能創建匿名內部類的一個實例。
· 一個匿名內部類一定是在new的后面,用其隱含實現一個接口或實現一個類。
 · 因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效。
· 內部類只能訪問外部類的靜態變量或靜態方法。

匿名類和內部類中的中的this :
有時候,我們會用到一些內部類和匿名類。當在匿名類中用this時,這個this則指的是匿名類或內部類本身。這時如果我們要使用外部類的方法和變量的話,則應該加上外部類的類名。

關於內部類的作用:
一個內部類對象可以訪問創建它的外部類對象的內容, 甚至包括私有變量!Java編譯器在創建內部類對象時,隱式的把其外部類對象的引用也傳了進去並一直保存着。這樣就使得內部類對象始終可以訪問其外部類對象,同時這也是為什么在外部類作用范圍之外向要創建內部類對象必須先創建其外部類對象的原因。
如果內部類里的一個成員變量與外部類的一個成員變量同名,也即外部類的同名成員變量被屏蔽了,怎么辦?沒事,Java里用如下格式表達外部類的引用:
外部類名.this


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM