JDK1.8 通过使用关键字default可以给接口中的方法添加默认实现,此外,接口中还可以定义静态方法,示例代码如下所示:
interface Inter8 {
void f();
default void g() {
System.out.println("this is default method in interface");
}
static void h() {
System.out.println("this is static method in interface");
}
}
那么,为什么要引入接口中方法的默认实现呢?
其实,这样做的最重要的一个目的就是为了实现接口升级。在原有的设计中,如果想要升级接口,例如给接口中添加一个新的方法,那么会导致所有实现这个接口的类都需要被修改,这给 Java 语言已有的一些框架进行升级带来了很大的麻烦。如果接口能支持默认方法的实现,那么可以给这些类库的升级带来许多便利。
例如,为了支持 Lambda 表达式,Collection 中引入了 foreach方法,可以通过这个语法增加默认的实现,从而降低了对这个接口进行升级的代价,不需要所有实现这个接口的类进行修改。