179/180接口的私有方法的定义和使用
接口的私有方法定义
问题描述:
我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题。但是这个共有方法不应该让实现类使用,应该是私有化的。
解决方案:
从Java9开始,接口当中允许定义私有方法。
1.普通私有方法,解决多个默认方法之间重复代码问题
格式:
private返回值类型方法名称(参数列表){
方法体
}
2.静态私有方法,解决多个静态方法之阅重复代码间题
格式:
private static返回值类型方法名称(参数列表){
方法体
}
接口的私有方法使用
public interface MyInterfaceStatic {
public default void methodDefault1() {
System.out.println("默认方法1");
methodCommon();
}
public default void methodDefault2() {
System.out.println("默认方法2");
methodCommon();
}
public default void methodCommon() {
System.out.println("AAA");
System.out.println("BBB");
System.out.println("cCC");
}
}
实例: 重写接口 public interface MyInterfacePrivateB { public static void methodStatic1(){ System.out.println("静态方法1"); methodStaticCommon(); } public static void methodStatic2(){ System.out.println("静态方法2"); methodStaticCommon(); } //如果jdk不是java 9 此处会报错,报错内容“make not methodStaticCommon private” private static void methodStaticCommon(){ System.out.println("AAA"); System.out.println("BBB"); System.out.println("BBB"); } } 对接口的引用 public class Demo04Interface { public static void main(String[] args) { MyInterfacePrivateB.methodStatic1();; MyInterfacePrivateB.methodStatic2(); } }
public interface MyInterfacePrivateA { public default void methodDefault1() { System.out.println("默认方法1"); methodCommon(); } public default void methodDefault2() { System.out.println("默认方法2"); methodCommon(); } private void methodCommon() { System.out.println("AAA"); System.out.println("BBB"); System.out.println("CCC"); } } public class MyInterfacePrivateAImpl implements MyInterfacePrivateA { public void methodAnother() { // 直接访问到了接口中的默认方法,这样是错误的! // methodCommon(); } } public interface MyInterfacePrivateB { public static void methodStatic1() { System.out.println("静态方法1"); methodStaticCommon(); } public static void methodStatic2() { System.out.println("静态方法2"); methodStaticCommon(); } private static void methodStaticCommon() { System.out.println("AAA"); System.out.println("BBB"); System.out.println("CCC"); } }