1、匿名內部類適合創建那種只需要一次使用的類
2、匿名內部類定義格式:
new 實現接口() | 父類構造器(實參列表){ //匿名內部類類體部分 }
3、從上面定義格式可以看出,匿名內部類必須實現一個接口,或繼承一個父類,並且只可以實現一個接口,或實現一個父類
4、匿名內部類不能定義為抽象類,因為定義匿名內部類時,會立即創建匿名內部類的對象,因此不能定義為抽象類
5、匿名內部類不能定義構造器,因為匿名內部類沒有類名,所以無法定義構造器,但可以定義初始化塊,可以通過實例初始化,來完成構造器需要完成的事情
6、最常用的創建匿名內部類方式是:需要創建某個接口類型的對象
代碼1:用實現類實現
//-定義一個接口 interface Product{ public double getPrice(); public String getName(); } //-實現接口 class AnonymouseProduct implements Product{ public double getPrice(){ return 20.5; } public String getName(){ return "游戲機"; } } public class AnonymouseTest{ //-與接口耦合 public void test(Product p){ System.out.println("張三買了一個"+p.getName()+",消費了"+p.getPrice()+"美元!"); } public static void main(String[] args){ //-多態方式創建實現類實例 new AnonymouseTest().test(new AnonymouseProduct()); } }
運行結果:
代碼2:用匿名類實現
//-定義接口 interface Product{ public double getPrice(); public String getName(); } public class AnonymouseTest{ //-與接口耦合 public void test(Product p){ System.out.println("張三買了一個"+p.getName()+",消費了"+p.getPrice()+"美元!"); } public static void main(String[] args){ AnonymouseTest at=new AnonymouseTest(); //-通過匿名類實現接口 at.test(new Product(){ public double getPrice(){ return 20.5; } public String getName(){ return "游戲機"; } }); } }
運行效果:
代碼3:用匿名類實現
繼承父類來創建匿名內部類