原文鏈接:www.baidu.com
什麼是匿名內部類
匿名內部類 :是內部類的簡化寫法。它的本質是一個 帶具體實現的 父類或者父接口的 匿名的 子類對象。
前提
- 匿名內部類必須繼承一個父類或者實現一個父接口。
格式 :
接口名稱 對象名 = new 接口名稱() {
// 覆蓋重寫所有抽象方法
};
對格式“new 接口名稱() {...}”進行解析:
- new代表創建對象的動作
- 接口名稱就是匿名內部類需要實現哪個接口
- {...}這纔是匿名內部類的內容
注意幾點問題:
- 匿名內部類,在【創建對象】的時候,只能使用唯一一次。如果希望多次創建對象,而且類的內容一樣的話,那麼就需要使用單獨定義的實現類了。
- 匿名對象,在【調用方法】的時候,只能調用唯一一次。如果希望同一個對象,調用多次方法,那麼必須給對象起個名字。
- 匿名內部類是省略了【實現類/子類名稱】,但是匿名對象是省略了【對象名稱】強調:匿名內部類和匿名對象不是一回事!!!
代碼舉例
定義接口
public interface Flyable {
//定義飛的抽象方法
public abstract void fly();
}
創建匿名內部類,並調用:
public class InnerDemo {
public static void main(String[] args) {
/*
1.等號右邊:是匿名內部類,定義並創建該接口的子類對象
2.等號左邊:是多態賦值,接口類型引用指向子類對象
*/
Flyable flyable = new Flyable() {
@Override
public void fly() {
System.out.println("我可以飛起來");
}
};
// 將flyable傳遞給showFly方法中;
showFly(flyable);
}
public static void showFly(Flyable f) {
f.fly();
}
}
代碼執行後的結果