Java 9 引入了私有 (private
) 和静态私有 (static private
) 接口方法。作为一个私有方法,这样的方法不能通过实现类或子接口访问。这些方法的引入是为了允许封装,其中某些方法的实现仅保留在接口内部。这有助于减少重复性,提高可维护性,并编写更清晰的代码。
Java 8 之前的接口
在 Java 8 之前,接口只能包含抽象方法和常量变量。因此,实现类必须实现这些方法。请看下面的例子。
示例
package com.tutorialspoint;
interface util {
public int sum(int a, int b);
}
public class Tester implements util {
public static void main(String[] args) {
Tester tester = new Tester();
System.out.println(tester.sum(2, 3));
}
@Override
public int sum(int a, int b) {
return a + b;
}
}
输出结果如下:
5
在上面的例子中,可以看到实现类必须实现该方法,因为它实现了接口。
Java 8 中的默认接口方法
从 Java 8 开始,默认方法被引入,可以在接口中提供方法的默认实现,实现类不必再实现同样的方法。此功能是为了支持 lambda 表达式,使得现有的集合框架能够与新引入的功能接口一起工作,而不需要实现接口的所有方法。这有助于避免重写集合框架。请看下面的示例:
示例
package com.tutorialspoint;
interface util {
public default int sum(int a, int b) {
return a + b;
}
}
public class Tester implements util {
public static void main(String[] args) {
Tester tester = new Tester();
System.out.println(tester.sum(2, 3));
}
}
输出结果如下:
5
Java 9 中的私有接口方法
从 Java 9 开始,接口进一步增强以支持私有方法。现在从 Java 9 起,我们可以在接口中拥有私有 (private
) 和私有静态 (private static
) 方法。这有助于封装功能,并保持方法的完整性。由于私有方法不可继承,它们可以用于接口中的公共方法,如下面的例子所示:
示例
package com.tutorialspoint;
interface util {
public default int operate(int a, int b) {
return sum(a, b);
}
private int sum(int a, int b) {
return a + b;
}
}
public class Tester implements util {
public static void main(String[] args) {
Tester tester = new Tester();
System.out.println(tester.operate(2, 3));
}
}
输出结果如下:
5
Java 9 中的私有静态接口方法
类似地,我们可以拥有私有静态方法,这种方法可以从静态和非静态方法中调用。请看下面的示例:
示例
package com.tutorialspoint;
interface util {
public default int operate(int a, int b) {
return sum(a, b);
}
private static int sum(int a, int b) {
return a + b;
}
}
public class Tester implements util {
public static void main(String[] args) {
Tester tester = new Tester();
System.out.println(tester.operate(2, 3));
}
}
输出结果如下:
5
私有静态方法不能在接口中调用非静态方法,并且它在接口外部是不可访问的。即使是实现类也不能访问私有静态方法。