每天一分鐘來一顆Java語法糖(七)接口的默認方法
接口的默認方法引入版本
- Java1.8推出了接口的默認方法/靜態方法(都帶實現的),爲Lambda表達式提供支持
接口的默認方法介紹
- Java最初設計時,接口的方法都是沒有實現的、公開的。Java1.8以後接口可以有實現的方法。
接口的默認方法注意事項
- 以default 關鍵字標註,其他的定義和普通方法一樣。
- 默認方法不能重寫Object中的方法
- 實現類可以繼承/重寫父接口的默認方法
- 當父類和父接口都有(同名同參數)默認方法,子類繼承父類的默認方法,這樣可以兼容JDK7及以前的代碼
- 子類實現了2個接口(均有同名同參數的默認方法),那麼編譯失敗,必須在之類中重寫這個default方法。
- 接口實現的靜態方法屬於本接口的,不屬於子類/子接口
- 接口實現的靜態方法,子類、子接口不繼承該靜態方法,只能通過所在的接口名來調用
接口的默認方法演示
public class Test {
public static void main(String[] args) {
Fruit.showTaste();
Fruit apple = new Apple();
apple.buy();
Fruit orange = new Orange();
orange.buy();
}
}
public interface Fruit {
static void showTaste() {
System.out.println("水果都很美味");
}
default void buy() {
System.out.println("購買水果!");
}
}
public class Apple implements Fruit {
}
public class Orange implements Fruit {
@Override
public void buy() {
System.out.println("購買橘子");
}
}
效果如下
如果是static的不能用子類去調用