Java8 Interface Default and Static Methods
在 Java 8 之前,接口只能有公共抽象方法。 如果不强制所有实现类创建新方法的实现,就不可能向现有接口添加新功能,也不可能创建具有实现的接口方法。
从 Java 8 开始,接口可以具有静态和默认方法,尽管在接口中声明了这些方法,但它们具有已定义的行为。
静态方法
假如一个接口有如下的方法
static String producer() {
return "N&F Vehicles";
}
静态 producer() 方法只能通过接口和在接口内部使用。 它不能被实现类覆盖。 要在接口之外调用它,应使用静态方法调用的标准方法:
String producer = Vehicle.producer();
默认方法
默认方法是使用新的 default 关键字声明的。 这些可以通过实现类的实例访问,并且可以被覆盖。
让我们为 Vehicle 接口添加一个默认方法,该方法也会调用该接口的静态方法:
default String getOverview() {
return "ATV made by " + producer();
}
假设这个接口是由类 VehicleImpl 实现的。 为了执行默认方法,应创建此类的实例:
Vehicle vehicle = new VehicleImpl();
String overview = vehicle.getOverview();