jdk8之后出现
接口允许出现带有方法体的静态和非静态方法。
public interface A {
void show(); //编译器默认添加public abstract
default void show1(){ //带方法体的默认方法,前面还是会默认添加public
}
static void show2(){
} //静态方法,默认添加public
//JDK9以后出现
private void show3(){ //私有的非静态方法
}
private static void show4(){ //私有的静态方法
}
}
默认方法
用于接口的升级工作。当需要对接口修改时,如果全部是抽象方法,那么实现接口的类需要全部重新实现新添加的抽象方法,否则类会报错,非常麻烦,所以引入默认方法。
默认方法子类可以重写,也可以不重写;重写时需要注意,重写方法的修饰符要大于等于接口方法的修饰符,而接口方法默认是public
静态方法
是为了让接口自身具备一定的执行,自身具备一些功能;在调用的时候,除了接口自己谁都调用不了。(多态、子类对象均不能调用)
私有方法
为了去掉接口中的重复代码。主要是解决接口自身功能代码的重复,但是默认的方法是public的,任何实现类均可以调用,为了解决这个问题,JDK9实现了私有方法,仅仅让接口自身的其他方法去调用。
而私有静态方法为了解决普通静态方法去调用普通方法时不能调用的情况而出现,让静态方法去可以调用私有静态方法(静态方法内只能调用静态方法)