接口的进化史
| 版本 | 特性 |
|---|---|
| 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 / Collections 、 Path / Paths 一样的“接口-工具类”对。因为接口中允许添加 static 方法,所以可以将工具类中的静态方法移动到接口中。如在 Paths 类中提供了以下方法:
// Pathspublic static Path get(URI uri) {...}public static Path get(String first, String... more) {...}
但在 Java 11 中, Path 接口直接增加了两个等效的静态方法:
// since Java 11, Path interfacepublic static Path of(URI uri) {...}public static Path of(String first, String... more) {...}
这可能使得在我们在未来不再需要像 Paths 一样的工具类。
private 方法
从 Java 9 开始,接口中允许存在 private 方法,该方法既可以是 static 方法,也可以是一个实例方法(instance method)。
