其实java8就已经做下伏笔了 在拥有静态和默认 两种拥有方法体的方法之后 接口出现私有方法也是一种必然
然后我们来创建一个包
包下创建一个接口 subInterface 参考代码如下
public interface subInterface {
private void show2() {
System.out.println("我是一个私有方法");
}
}
然后我们创建一个类 realizationMethod 参考代码如下
public class realizationMethod implements subInterface {
}
然后我们创建测试类 通过realizationMethod类来实现subInterface
参考代码如下
public class text {
public static void main(String args[]) {
subInterface real = new realizationMethod();
real.show2();
}
}
但这里你就会发现 无论是 用接口 还是用实现接口的对象 调用私有方法都是会报错的
因为 他是一个私有的方法 是接口独有的
然后 用接口的实现类调用 也会报错的 然后 我们试着 在接口里写一个静态方法 然后通过静态方法调用它
但是 我们会发现他还是报错了
我们改一下show2的作用域 将subInterface的接口修改如下
public interface subInterface {
private static void show2() {
System.out.println("我是一个私有方法");
}
static void show3(){
show2();
}
}
将私有的
show2加上一个static同类中的其他方法就能拿到他了 然后在测试类通过接口名调用show3 show3就会调用show2
测试类代码修改如下
public class text {
public static void main(String args[]) {
subInterface real = new realizationMethod();
subInterface.show3();
}
}
运行结果如下
当然 普通的私有方法 也是有人能调的 那就是 默认方法 他就可以调用没有static修饰的私有方法
subInterface接口代码修改如下
public interface subInterface {
private void show2() {
System.out.println("我是一个私有方法");
}
static void show3(){
}
default void show4(){
show2();
}
}
然后 测试类修改代码如下
public class text {
public static void main(String args[]) {
subInterface real = new realizationMethod();
real.show4();
}
}
运行结果如下