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");
    }

}

 

 

posted @ 2022-07-05 09:02  ja不会va  阅读(113)  评论(0)    收藏  举报