每天一分钟来一颗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的不能用子类去调用