JDK9版本后–接口成员特点:接口中私有方法
-
私有方法产生原因
Java 9中新增了带方法体的私有方法,这其实在Java 8中就埋下了伏笔:Java 8允许在接口中定义带方法体的默认方法和静态方法。这样可能就会引发一个问题:当两个默认方法或者静态方法中包含一段相同的代码实现时,程序必然考虑将这段实现代码抽取成一个共性方法,而这个共性方法是不需要让别人使用的,因此用私有给隐藏起来,这就是Java 9增加私有方法的必然性
-
定义格式
-
格式1
private 返回值类型 方法名(参数列表) { }
-
范例1
private void show() { }
-
格式2
private static 返回值类型 方法名(参数列表) { }
-
范例2
private static void method() { }
-
-
注意事项
- 默认方法可以调用私有的静态方法和非静态方法
- 静态方法只能调用私有的静态方法
例子:
定义一个接口:
public interface Inter {
public default void start() {
System.out.println("start方法执行了...");
log();
}
public default void end() {
System.out.println("end方法执行了...");
log();
}
private void log() {
System.out.println("日志记录(模拟)");
}
public static void open() {
check();
System.out.println("open方法执行了");
}
public static void close() {
check();
System.out.println("close方法执行了");
}
private static void check() {
System.out.println("权限校验(模拟)");
}
}
测试类和实现类
public class TestInterface {
public static void main(String[] args) {
InterImpl i = new InterImpl();
i.start();
i.end();
//接口中的静态方法,只能接口名调用
Inter.open();
Inter.close();
}
}
class InterImpl implements Inter {
//接口中没有抽象方法用来重写
}
执行结果:
start方法执行了…
日志记录(模拟)
end方法执行了…
日志记录(模拟)
权限校验(模拟)
open方法执行了
权限校验(模拟)
close方法执行了