接口中的私有方法介绍

问题描述:

我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题。 但是这个共有方法不应该让实现类使用,应该是私有化的。 ✔解决方案: 从Java 9开始,接口当中允许定义私有方法。 1. 普通私有方法,解决多个默认方法之间重复代码问题 格式: private 返回值类型 方法名称(参数列表) { 方法体 } 2. 静态私有方法,解决多个静态方法之间重复代码问题 格式: private static 返回值类型 方法名称(参数列表) { 方法体 }

package demo01; 
	public interface MyInterfacePrivateA {
          
   
	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"); 
	} 
}

实现私有方法A

package demo01; 
public class MyInterfacePrivateAImpl implements MyInterfacePrivateA 	{
          
    
	public void methodAnother() {
          
    
		// 直接访问到了接口中的默认方法,这样是错误的! 
		// methodCommon(); 
	} 
}

修改成私有

public interface MyInterfacePrivateA {
          
    
	private void methodCommon() {
          
    
		System.out.println("AAA"); 
		System.out.println("BBB"); 
		System.out.println("CCC"); 
	} 
}

私有静态方法B

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

使用私有方法

package demo01; 
public class Demo04Interface {
          
    
	public static void main(String[] args) {
          
    
		MyInterfacePrivateB.methodStatic1(); 
		MyInterfacePrivateB.methodStatic2(); 
		// 错误写法! 
		// MyInterfacePrivateB.methodStaticCommon(); 
	} 
}
经验分享 程序员 微信小程序 职场和发展