更新時間:2022-07-19 來源:黑馬程序員 瀏覽量:
匿名內(nèi)部類是沒有名稱的內(nèi)部類。在Java中調(diào)用某個方法時,如果該方法的參數(shù)是接口類型,除了可以傳入一個接口實現(xiàn)類外,還可以使用實現(xiàn)接口的匿名內(nèi)部類作為參數(shù),在匿名內(nèi)部類中直接完成方法的實現(xiàn)。
創(chuàng)建匿名內(nèi)部類的基本語法格式如下:
new 父接口 (){ //匿名內(nèi)部類實現(xiàn)部分 }
下面通過一個案例學(xué)習(xí)匿名內(nèi)部類的定義和使用,如文件4-23所示。
文件4-23 Example23.java
interface Animal { void shout (); } public class Example23{ public static void main (String[] args) { String name = "小花"; animalShout (new Animal () { @Override public void shout () { System.out.println (name+"喵喵......"); } }); } public static void animalShout (Animal an) { an.shout (); } }
文件4-23的運行結(jié)果如圖4-23所示。
圖4-23 文件4-23的運行結(jié)果
文件4-23中,第1~3行代碼創(chuàng)建了Animal接口;第7~12行代碼是調(diào)用animalShout()方法,將實現(xiàn)Animal接口的匿名內(nèi)部類作為animalShout()方法的參數(shù),并在匿名內(nèi)部類中重寫了Animal接口的shout()方法。
需要注意的是,在文件4-23中的匿名內(nèi)部類中訪問了局部變量name,而局部變量name并沒有使用final修飾符修飾,程序也沒有報錯。這是JDK8的新增特性,允許在局部內(nèi)部類、匿名內(nèi)部類中訪問非final修飾的局部變量,而在JDK8之前,局部變量前必須加final修飾符,否則程序編譯時報錯。