在业务发展过程中,发现某个功能是所有子类都需要的,那么我们该怎么办?给接口增加抽象方法吗?如果直接在接口增加抽象方法,那么所有已经写好的具体实现类就会报编译错误。因为具体类必须实现接口的全部抽象方法。这样就给代码的扩展带来很大的麻烦。如果可以只在接口增加需要的方法,而所有的实现子类就可以直接拿来使用就方便许多了。这就是允许接口添加默认方法的原因。
public interface CRMSystem {
Client add(Client newGuy);
Event add(Event e, Client guy);
Event[] todayEvents();
// 默认方法,用来升级接口
public default void myMethodDefault() {
...
}
}
那么为什么要在接口增加静态方法呢?一样的道理,静态方法也会被实现子类继承。
那么为什么要在接口增加私有方法呢?私有方法不会被实现子类继承,但是可以通过默认方法或者静态方法来调用,从而运行私有方法中的代码。
public static 返回值类型 方法名(参数列表) {方法体} // 静态方法,不可以是protected,默认是public
private 返回值类型 方法名(参数列表) {方法体} // 私有的普通方法
private static 返回值类型 方法名(参数列表) {方法体} // 私有的静态方法
参阅:https://q.cnblogs.com/q/137311/