Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
考虑一个名为 DoIt
的开发接口:
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); }
假设稍后你想要向 DoIt
添加第三个方法,这样接口现在变成:
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); boolean didItWork(int i, double x, String s); }
如果进行此更改,则实现旧 DoIt
接口的所有类都将中断,因为它们不再实现旧接口。依赖此接口的程序员将大声抗议。
尝试预测接口的所有用途,并从头开始完全指定。如果要向接口添加其他方法,你可以有几种选择。你可以创建继承 DoIt
的 DoItPlus
接口:
public interface DoItPlus extends DoIt { boolean didItWork(int i, double x, String s); }
现在,你的代码用户可以选择继续使用旧接口或升级到新接口。
或者,你可以将新方法定义为 default methods。以下示例定义名为 didItWork
的默认方法:
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); default boolean didItWork(int i, double x, String s) { // Method body } }
请注意,你必须提供默认方法的实现。你还可以为现有接口定义新的 static methods。用户如果有实现使用新的默认或静态方法增强的接口的类,则不必修改或重新编译这些类来适应添加的方法。