·
文章目录
- 前言
- 一、接口的私有方法应用场景?
- 代码片段:
- 二、正确写法
- 1.重写接口
- 2.对接口的引用
前言
问题描述:
我们需要抽取一个公用方法,用来解决两个默认方法之间重复代码的问问题。
但是这个共有方法不应该让实现类使用,应该时私有化的
解决方案:
从java9开始,接口当中允许定义私有方法。
1.普通私有方法,解决多个方法之间重复代码问题
格式:
private 返回值类型 方法名称(参数列表){
方法体
}
2.静态私有方法,解决多个静态方法之间代码重复问题
private static 返回值类型 方法名称(参数列表)(){
方法体
}
接口的私有方法的使用,是为了解决多个静态方法中重复的问题。
一、接口的私有方法应用场景?
代码片段:
public interface MyInterfacePrivateA {
public default void methodDeault1(){
System.out.println("默认方法1");
System.out.println("AAA");
System.out.println("BBB");
System.out.println("BBB");
}
public default void methodDeault2(){
System.out.println("默认方法2");
System.out.println("AAA");
System.out.println("BBB");
System.out.println("BBB");
}
}
接口的私有方法的使用场景:在代码中methodDeault1()和methodDeault2()有共同的输出语句(共同方法也可)。
二、正确写法
1.重写接口
代码如下(示例):
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");
}
}
2.对接口的引用
代码如下(示例):
注:不能调用MyInterfacePrivateB.methodStaticCommon,因为该方法是私有的方法,只有在本类或者接口中调用
public class Demo04Interface {
public static void main(String[] args) {
MyInterfacePrivateB.methodStatic1();;
MyInterfacePrivateB.methodStatic2();
}
}
# 接口内容总结
在Java 9+版本中,接口的内容可以有:
1.成员变量其实是常量,格式:
[public] [static] [final] 数据类型常量名称=数据值;
常量必须进行赋值,而且一旦赋值不能改变。
常量名称完全大写,用下划线进行分隔。
2.接口中最重要的就是抽象方法,格式:
[public] [abstract] 返回值类型方法名称(参数列表);
注意: 实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类。
3.从Java 8开始,接口里允许定义默认方法,格式:
[public] default 返回值类型方法名称(参数列表) {方法体}
注意: 默认方法也可以被覆盖重写
4.从Java 8开始,接口里允许定义静态方法,格式:
[public] static 返回值类型方法名称(参数列表) {方法体}
注意:应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法
5.从Java 9开始,接口里允许定义私有很乏,格式:
普通私有方法: private 返回值类型方法名称(参数列表) {方法体}
静态私有方法: private static 返回值类型方法名称(参数列表) {方法体}
注意: private的方法只有接口自己才能调用,不能被实现类或别人使用。