Java接口中default方法可直接调用同一接口内的private实例或static方法(Java 9+),无需前缀;私有方法仅限接口内复用,不可被实现类或外部访问,且static方法不能调用私有实例方法。
Java 接口中的 default 方法可以直接调用接口内定义的 private 方法,前提是该私有方法是 static 或非 static 的私有方法(Java 9+ 支持),且调用发生在同一接口内。
从 Java 9 开始,接口可以定义私有方法,包括:
private 修饰,无 static,只能被同一接口内的其他 default 方法调用;private static 修饰,可被同一接口内的 default 方法或 static 方法调用。它们不能被实现类、子接口或外部代码访问,仅用于封装接口内部的复用逻辑。
调用方式与普通方法调用一致,无需接口名前缀,直接使用方法名:
立即学习“Java免费学习笔记(深入)”;
methodName(...);staticMethodName(...)(不加 InterfaceName.)。例如:
interface Calculator { private int add(int a, int b) { return a + b; }<pre class="brush:php;toolbar:false;">private static int multiply(int a, int b) { return a * b;}default int compute(int x, int y) { int sum = add(x, y); // ✅ 正确:调用私有实例方法 int product = multiply(x, y); // ✅ 正确:调用私有静态方法 return sum + product;}
}
以下写法会导致编译错误:
this.add(...) 或 Calculator.super.add(...) 显式调用(语法冗余且不合法);this,而 static 上下文无 this)。私有方法适合提取 default 方法间的公共逻辑,比如校验、格式化或计算片段:
private 方法;private static 工具方法;不复杂但容易忽略:只要方法在同一个接口里、签名匹配、访问权限正确,调用就自然成立。