1. 程式人生 > >java中介面內的匿名內部類

java中介面內的匿名內部類

什麼是介面和匿名內部類

介面:

    java中的介面定義:多個抽象類的抽象就是介面.
    Java中的介面表示規範,用於定義一組抽象方法,表示某一類事物必須具備的功能,要求實現類必須來實現該介面並提供方法實現.
    Java介面的方法只能是抽象的和公開的,Java介面不能有構造器。

匿名內部類:

匿名內部類也就是沒有名字的內部類

正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化程式碼編寫
但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個介面。

這是實現了一個動物類中繼承的dog,Flyable,Swimable,在main函式呼叫的時候實現了匿名內部類,
public class MainClass {

    public static void main(String[] args) {
        Animal animal = new Duck();
        MainClass.test(animal);

        // 匿名內部類一般情況下只是重寫父類的方法、實現介面的方法
        MainClass.watchDoor(new Animal(){
            String whisper() {
                return "汪汪";
            }
        });

        MainClass.flyGePassBook(new
Flyable() { public void fly() { System.out.println("飛"); } }); MainClass.fishSwimming(new Swimable() { public void swim() { System.out.println("遊"); } }); } }
public class Animal {
    String name;
    String whisper() {
        return
null; } }
public class Dog extends Animal {
    String whisper() {
        return "汪汪";
    }
}
public interface Flyable {
    public void fly();
}

public interface Swimable {
    public void swim();
}

還用一種情況就是介面中使用匿名內部類:

這是一個介面Animal

interface Animal {
    String name = "動物一隻";

    public abstract void wawaWangwang();
    /*Animal a=new Animal() {   
        @Override
        public void wawaWangwang() {
            // TODO Auto-generated method stub

        }
    };*/
}

這是實現類的主類:

public class MainClass {
    public static void main(String[] args) {

        MainClass.test(new Animal() {
            public void wawaWangwang() {
                System.out.println("旺旺");
            }
        });
    }

    static void test(Animal animal) {
        System.out.println(Animal.name);
        animal.wawaWangwang();
    }
}

在MainClass.test();這個方法中由於呼叫的test方法有一個Animal 的形參;所以我們需要傳入一個形參來實現方法,test方法實現了animal中方法wangwang的呼叫,MainClass呼叫test方法。
Animal是一個介面,我們需要一個類去實現介面,於是建立一個匿名內部類,
可以看見,匿名內部類中重寫了Animal中的方法,對介面進行了實現。
注意的是:在Animal介面中被註釋的程式碼,事實上也是一種匿名類(可以給新手用來裝逼的一點),只是這個匿名類類被接收了。