文档

Java™ 教程
隐藏目录
接口的演变
路径:学习Java语言
课程:接口和继承
章节:接口

演化的接口

考虑一个你开发的名为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接口的所有类都会出错,因为它们不再实现旧的接口。依赖于该接口的程序员会强烈抗议。

尽量预见你的接口的所有用途并从一开始就完整地指定它。如果你想要向接口添加额外的方法,有几个选项。你可以创建一个扩展DoItDoItPlus接口:

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) {
       // 方法体 
   }
   
}

注意,默认方法必须提供实现。你还可以为现有接口定义新的静态方法。那些实现了增强了新默认方法或静态方法的接口的类的用户无需修改或重新编译它们以适应这些额外的方法。


上一页: 使用接口作为类型
下一页: 默认方法