Java - 接口私有方法
Java 9 引入了私有方法和静态私有接口方法。作为私有方法,这类方法无法通过实现类或子接口访问。这些方法被引入是为了实现封装,将某些方法的实现仅保留在接口中。这有助于减少重复代码、提高可维护性,并编写更干净的代码。
Java 8 之前的接口
在 Java 8 之前,interface 只能拥有抽象方法和常量变量。因此,实现类必须实现这些方法。请看下面的示例。
示例
package com.;
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
在上面的示例中,我们可以看到实现类必须实现该方法,因为它实现了 interface。
Java 8 中接口的默认方法
从 Java 8 开始,引入了默认方法,我们可以为方法提供默认实现,实现类无需再实现该方法。此特性是为了支持 lambda 表达式,使得现有的 collection framework 可以与新引入的 functional interfaces 配合工作,而无需实现接口的所有方法。这避免了重写 collection framework。请看下面的示例:
示例
package com.;
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 开始,interface 进一步增强,支持私有方法。从 Java 9 开始,我们可以在 interface 中定义私有方法以及私有静态方法。这有助于封装功能并保持方法的完整性。由于私有方法无法被继承,它们可以被 interface 的公共方法使用,如下面的示例所示:
示例
package com.;
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.;
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
私有静态方法无法调用 interface 中的非静态方法,并且无法在 interface 外部访问。即使是实现类也无法访问私有静态方法。