接口的进化史

版本 特性
Before Java 8
- 所有方法自动为 public
- 所有属性自动为 public static final
Java 8
- 允许 static 方法
- 新增 default 方法
Java 9
- 允许 private 方法

属性和方法不带修饰符

由于接口中的方法自动为 public ,属性自动为 public static final ,所以《阿里巴巴 Java 开发手册》推荐接口中的方法和属性不加任何修饰符,保持代码的简洁性,并加上有效的 Javadoc 注释。

static 方法

从 Java 8 开始,接口中允许包含 static 方法。

在 Java 标准库中,你可以发现许多像 Collection / CollectionsPath / Paths 一样的“接口-工具类”对。因为接口中允许添加 static 方法,所以可以将工具类中的静态方法移动到接口中。如在 Paths 类中提供了以下方法:

  1. // Paths
  2. public static Path get(URI uri) {...}
  3. public static Path get(String first, String... more) {...}

但在 Java 11 中, Path 接口直接增加了两个等效的静态方法:

  1. // since Java 11, Path interface
  2. public static Path of(URI uri) {...}
  3. public static Path of(String first, String... more) {...}

这可能使得在我们在未来不再需要像 Paths 一样的工具类。

private 方法

从 Java 9 开始,接口中允许存在 private 方法,该方法既可以是 static 方法,也可以是一个实例方法(instance method)。