此Java教程针对JDK 8编写。本页面描述的示例和实践未利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及后续版本中更新的语言特性摘要。
请参阅JDK发行说明,了解所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息。
考虑一个你开发的名为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); }
现在你的代码的用户可以选择继续使用旧的接口,或者升级到新的接口。
另外,你可以将新方法定义为默认方法。下面的示例定义了一个名为didItWork
的默认方法:
public interface DoIt { void doSomething(int i, double x); int doSomethingElse(String s); default boolean didItWork(int i, double x, String s) { // 方法体 } }
注意,默认方法必须提供实现。你还可以为现有接口定义新的静态方法。那些实现了增强了新默认方法或静态方法的接口的类的用户无需修改或重新编译它们以适应这些额外的方法。