天天看點

匿名内部類

一、匿名内部類表達式包含以下部分:

1.操作符:new;

2.一個要實作的接口或要繼承的類,案例一中的匿名類實作了HellowWorld接口,案例二中的匿名内部類繼承了Animal父類;

3.一對括号,如果是匿名子類,與執行個體化普通類的文法類似,如果有構造參數,要帶上構造參數;如果是實作一個接口,隻需要一對空括号即可;

4.一段被"{}"括起來類聲明主體;

5.末尾的";"号(因為匿名類的聲明是一個表達式,是語句的一部分,是以要以分号結尾)。

二、匿名内部類特點:

(1)、匿名内部類可以通路外部内的所有成員;

(2)、匿名内部類通路的局部變量必須是final變量(注意:JDK1.8即使沒有用final修飾也可以通路,因為Java8會自動使用final修飾内部類要通路的局部變量);

(3)、屬性屏蔽,與執行個體内部類(内嵌類)相同,匿名内部類定義的類型(如變量)會屏蔽其作用域範圍内的其他同名類型(變量);

(4)、匿名内部類中不能定義靜态屬性、方法;  

(5)、匿名内部類可以有常量屬性(final修飾的屬性);

(6)、匿名内部内中可以定義屬性,如:private int x = 1;

(7)、匿名内部内中可以有額外的方法(父接口、類中沒有的方法);

(8)、匿名内部内中可以定義内部類;

(9)、匿名内部内中可以對其他類進行執行個體化;

(10)、由于沒有名字,因而無法定義構造方法,編譯程式會自動生成他的構造方法,在其中自動調用其父類的構造方法。

三、注意點:

1.匿名内部類沒有名字,指的是:沒有類名。聲明由:父類或接口名稱+辨別符組成。如:Outer a;

2.匿名内部類的繼承或實作是通過new 構造方法()方法來定義的。

以上兩點就說明了,

匿名内部類的定義方法:

父類或接口名稱+辨別符=new 父類或接口名稱構造方法([參數]);

如:Outer a=new Outer();