- 在 Java8 之前接口变量必须是 public、static、final 修饰的,方法必须是 public、abstract 的
- 但Java8 扩展了接口的定义,添加了默认方法(default)和静态方法,默认方法使得接口也可以有实现,该接口实现类可以不实现默认方法
interface Foo1 {
default String Hello(String name){
return "Hello "+name;
};
}
- 静态方法只能通过接口名调用,不能通过实现类调用,实现类也无需实现该方法,其它接口继承该接口时也不继承静态方法
interface Foo1 {
static void sayHello(){
System.out.println("Hello");
}
}
Foo1.sayHello();
- 如果一个接口多继承了两个接口,这两个接口包含了完全相同的静态方法,这种情况下不会报错,因为接口静态方法只能由该接口调用,如果这两个接口有相同的默认方法,则会报错,需要重写默认方法
- 默认方法静态方法可以在不打破原有继承体系上改进接口,如官方库中给 Collection 接口增加了 stream()、forEach()方法