考虑一下你开发的名为DoIt
的接口:程序员
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); }
假设稍后你要向DoIt
添加第三个方法,这样如今接口变为:segmentfault
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); boolean didItWork(int i, double x, String s); }
若是进行此更改,那么实现旧DoIt
接口的全部类都将中断,由于它们再也不实现旧接口,依赖此接口的程序员将大声抗议。code
尝试预测接口的全部用途,并从一开始就彻底指定它,若是要向接口添加其余方法,能够使用多个选项,你能够建立一个扩展DoIt
的DoItPlus
接口:接口
public interface DoItPlus extends DoIt { boolean didItWork(int i, double x, String s); }
如今,你的代码用户能够选择继续使用旧接口或升级到新接口。开发
或者,你能够将新方法定义为默认方法,如下示例定义名为didItWork
的默认方法:get
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); default boolean didItWork(int i, double x, String s) { // Method body } }
请注意,你必须提供默认方法的实现,你还能够为现有接口定义新的静态方法,具备实现使用新的默认或静态方法加强的接口的类的用户没必要修改或从新编译它们以适应额外方法。编译