接口的私有方法
2019-03-26 本文已影响0人
十六只猴子王
问题描述:
我们需要抽取一个公有方法,用来解决两个默认方法之间重复代码的问题,但这个公有方法不能让实现类使用,应该是私有化的
解决方案:
从java9开始,接口中可以定义私有方法
1.普通私有方法:解决多个默认方法之间的代码重复问题
格式:
private 返回值类型 方法名称(参数列表){
方法体
}
2.静态私有方法,解决多个静态方法之间的代码重复问题
格式:
private static 返回值类型 方法名称(参数列表){
方法体
}
MyInterfacePrivateA
package Demo04;
public interface MyInterfacePrivateA {
public default void methodDefaultA(){
System.out.println("默认方法1");
methodCommon();
}
public default void methodDefaultB(){
System.out.println("默认方法2");
methodCommon();
}
private void methodCommon(){
System.out.println("AAA");
System.out.println("BBB");
System.out.println("CCC");
}
}
MyInterfacePrivateAImpl
public class MyInterfacePrivateAImpl implements MyInterfacePrivateA{
public static void main(String[] args) {
MyInterfacePrivateAImpl impl = new MyInterfacePrivateAImpl();
impl.methodDefaultA();
impl.methodDefaultB();
}
}
MyInterfacePrivateB
public static void methodDefaultA(){
System.out.println("默认方法1");
methodCommon();
}
public static void methodDefaultB(){
System.out.println("默认方法2");
methodCommon();
}
private static void methodCommon(){
System.out.println("AAA");
System.out.println("BBB");
System.out.println("CCC");
}
}
MyInterfaceStaticBImpl
public class MyInterfaceStaticBImpl implements MyInterfacePrivateB {
public static void main(String[] args) {
MyInterfacePrivateB.methodDefaultA();
MyInterfacePrivateB.methodDefaultB();
}
}