java9新特性-接口支持私有方法

java9新特性-接口支持私有方法
jwangJava7中接口
在Java SE 7或更早版本中,一个接口中只能只能定义如下两种:
- 常量
- 抽象方法
我们不能在接口中提供方法实现。如果我们要提供抽象方法和非抽象方法(方法与实现)的组合,那么我们就得使用抽象类
public interface JavaSeven{ |
这里我们定义了一些常量和公共抽象方法。如果我们想在这里提供这些方法的实现,如何解决这个问题呢?我们应该使用抽象类来解决Java SE 7中的上述情况
Java8中接口
在Java SE 8 Release中Java接口引入了一些新功能——默认方法和静态方法。我们可以在Java SE 8的接口中编写方法实现,仅仅需要使用“default”关键字来定义它们。在Java SE 8中,一个接口中能定义如下几种:
- 常量
- 抽象方法
默认方法静态方法
public interface JavaEight{ |
这里我们为所有方法提供了实现。如果我们观察上面的代码,我们觉得有些代码冗余。如果要将冗余代码提取为常用方法,那应该使用公共方法。但是,如果API开发人员不想向客户端公开任何其他方法。我们如何解决这个问题?我们应该使用抽象类来解决Java SE 8中的上述情况。
Java9中接口
为了解决上述的问题Java9提供了新的功能——在接口中使用private私有方法。我们可以使用’private’访问修饰符在接口中编写私有方法。在Java SE 9中,一个接口中能定义如下几种:
- 常量
- 抽象方法
- 默认方法
- 静态方法
私有方法私有静态方法
public interface JavaNine{ |
在这里,我们将冗余代码提取到通用的私有方法中,以便我们的API客户端无法看到它们。
在接口中定义私有方法
在Interface中编写私有方法时,我们应该遵循以下规则:
- 我们应该使用私有修饰符(private)来定义这些方法。
- 我们不能同时使用私有修饰符(private)和abstract来定义这些方法。
— “私有”方法意味着完全实现的方法,因为子类不能继承并覆盖此方法。
— “抽象”方法意味着无实现方法。这里子类应该继承并覆盖此方法。 - 私有方法必须包含方法体,必须是具体方法。
- 这些接口私有方法仅在该接口内是有用的或可访问的。我们无法从接口访问或继承私有方法到另一个接口或类


