文档

Java™ 教程-Java Tutorials 中文版
不断发展的接口
Trail: Learning the Java Language
Lesson: Interfaces and Inheritance
Section: Interfaces

不断发展的接口

考虑一个名为 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);
   
}

现在,你的代码用户可以选择继续使用旧接口或升级到新接口。

或者,你可以将新方法定义为 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。用户如果有实现使用新的默认或静态方法增强的接口的类,则不必修改或重新编译这些类来适应添加的方法。


Previous page: Using an Interface as a Type
Next page: Default Methods