一、匿名内部類表達式包含以下部分:
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();