java中介面內的匿名內部類
阿新 • • 發佈:2018-12-26
什麼是介面和匿名內部類
介面:
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介面中被註釋的程式碼,事實上也是一種匿名類(可以給新手用來裝逼的一點),只是這個匿名類類被接收了。