匿名內部類必須繼承一個父類或者實現一個接口。匿名內部類不能是抽象類,因爲系統在創建匿名內部類時,會立即創建匿名內部類的對象,因此不允許匿名內部類爲抽象類。
匿名內部類不能定義構造器,由於匿名內部類沒有類名,所以無法定義構造器,但匿名構造類可以初始化塊,可以通過實例初始化塊來完成構造函數需要完成的部分。
語法格式:
new 實現接口()|父類構造器(實參列表){匿名內部類的類體部分}
interface MyInter{
public String getName();
}
public class AnonymousTest{
public void test(MyInter i){
System.out.println("The Content of this function is" + i.getName());
}
}
public static void main(String[] args){
AnonymousTest ta;
ta.test(new MyInter(){
public String getName(){
return "Anonymous Content";
}
});
}
}
簡言之,匿名內部類的實現方式:第一種,繼承一個抽象類重寫其方法;第二種,實現一個接口並實現其方法。
使用匿名內部類的兩種情況:
實現的抽象方法需要特殊實現;需要抽象類或接口對象。
在匿名內部類編寫自己的其他方法不現實,匿名內部類只會被調用一次。
當接口的實例對象需要被重複使用時,可以將接口的實現類定義成一個獨立的類;如果這個類只需要一次性使用,則可以定義成匿名內部類。