Java 9新特性 - (1)接口中的私有方法

分享到:

在Java 7或更早版本中,一个接口中只能定义如下两种:

  • 常量
  • 抽象方法

在Java 8中接口引入了默认方法和静态方法。可以在接口中编写方法实现,仅仅需要使用default关键字来定义它们。

Java 9提供了新的功能,可以在接口中使用private关键字定义私有方法和私有静态方法,这些私有方法的作用是用于改善接口内部的代码可重用性。例如,如果需要两个默认方法来共享代码,则私有接口方法将允许它们共享代码,但不将该私有方法暴露给它的实现类调用。

截止至Java 9,一个接口中能定义如下几种:

  • 常量 (Java 7及以前版本支持)
  • 抽象方法 (Java 7及以前版本支持)
  • 默认方法 (Java 8+)
  • 静态方法 (Java 8+)
  • 私有方法 (Java 9+)
  • 私有静态方法 (Java 9+)

可以使用private访问修饰符在接口中编写私有方法。在接口中使用私有方法有四个规则:

  • 接口中private方法不能是abstract抽象方法。因为abstract抽象方法是公开的用于给接口实现类实现的方法,所以不能是private。
  • 接口中私有方法只能在接口内部的方法里面被调用。
  • 接口中私有静态方法可以在其他静态和非静态接口方法中使用。
  • 接口中私有非静态方法不能在私有静态方法内部使用。
 1interface CustomInterface {
 2
 3    public abstract void abstractMethod();  //抽象方法不能是私有的
 4
 5    public default void defaultMethod() {
 6        privateMethod(); //可以调用接口中的私有方法
 7        privateStaticMethod(); //可以调用接口中的私有静态方法
 8        System.out.println("普通方法被调用");
 9    }
10
11    public static void staticMethod() {
12        privateStaticMethod(); //public静态方法可以调用private静态方法
13        System.out.println("静态方法被调用");
14    }
15
16    private void privateMethod() {
17        System.out.println("private私有方法被调用");
18    }
19
20    private static void privateStaticMethod() {
21        System.out.println("private私有静态方法被调用");
22    }
23}

参考: