一、背景
例如这个场景
最开始,你写了一个接口TestInterface这个接口中没有声明任何方法,是一个空接口
public interface TestInterface { }
你根据这个空接口有一个实现类TestInterfaceImpl
public class TestInterfaceImpl implements TestInterface { // 因为接口中没有声明任何方法,所以实现类自然也没有。 }
陆陆续续这个接口下面实现了很多很多类。
现在想要对这个接口添加方法。如果在接口TestInterface中直接添加方法声明,会强制下面所有实现类全部都要实现方法
public interface TestInterface { void methodA(); // 给接口添加方法声明,实现类TestInterfaceImpl也需要实现此方法 }
使用 default 关键在接口中去声明方法,不会影响到先有实现类的功能
public interface TestInterface { default void newExec() {} }
二、优点
- 向后兼容,不会导致兼容性的问题。已有的实现类无需实现此方法,可正常工作。
- 符合开闭原则:对扩展开放,对修改关闭。
三、现有框架例子
直接在spring源码中搜索default关键字的接口,你会发现很多这样使用的例子。最开始就是普通接口及接口方法的声明,后面有default关键字声明的方法。
