匿名內部類特點:
1.匿名內部類是沒有名稱的內部類,沒辦法引用它們。必須在建立時,作為new語句的一部分來宣告並建立它們的例項。
2.匿名內部類必須繼承一個類(抽象的、非抽象的都可以)或者實現一個介面。如果父類(或者父介面)是抽象類,則匿名抽象類
必須實現其所有抽象方法。
3.匿名內部類中可以定義程式碼塊,用於例項的初始化,但是不能定義靜態程式碼塊。
匿名內部類語句:
new interface/superclass(){//類體}
這種形式的new語句宣告一個新的匿名類,它對一個給定的類進行擴充套件,或者實現一個給定的介面,並同時建立該匿名類的一個新
例項。
public class AnonymousInnerClass { public static void main(String[] args) { // TODO Auto-generated method stub Person p = new Person(); /*Animal dog = new Dog(); p.feed(dog);*/ //匿名類 new Animal() {//匿名類可以有自己的屬性和方法,但是不可以例項化,因為例項化的是父類,父類沒有改匿名類中屬性和方法 private String name = "aaa"; {//匿名類中可以有程式碼塊,初始化。不能用靜態程式碼塊如:static{} name = "哈哈"; } public void eat() { System.out.println("啃骨頭"); } public void show() { System.out.println(name); } }.show(); ; Animal dog = new Animal(){//實現呼叫多次 public void eat() { System.out.println("啃骨頭"); } }; p.feed(dog); p.feed(dog); p.feed(new Animal(){ public void eat() { System.out.println("吃魚肉"); } }); } } class Person{ public void feed(Animal animal) { animal.eat(); } } abstract class Animal{ public abstract void eat(); } /*class Dog extends Animal{ public void eat() { System.out.println("啃骨頭"); } }*/