学习内容:
一、接口中的私有方法
当我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题的时候,这个共有方法不应该让实现类使用,应该是私有化的。
从Java 9开始,接口中允许定义私有方法。
- 普通私有方法:解决多个默认方法之间重复代码问题
格式:
private 返回值类型 方法名称(参数列表) {
方法体
}
- 静态私有方法:解决多个静态方法之间重复代码问题
格式:
private static 返回值类型 方法名称(参数列表) {
方法体
}
举例说明:
首先我们定义一个接口,接口中定义两个默认方法和一个用于抽取它们重复代码的私有方法:
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 MyInterfacePrivateImpl implements MyInterfacePrivateA {
@Override
public void methodDefault1() {
}
@Override
public void methodDefault2() {
}
}
最后我们定义一个测试类:
public class Demo04Interface {
public static void main(String[] args) {
MyInterfacePrivateImpl impl = new MyInterfacePrivateImpl();
impl.methodDefault1();
impl.methodDefault2();
}
}
二、接口中的常量
接口当中也可以定义“成员变量”,但是必须使用public static final三个关键字进行修饰。从效果上看,这其实就是接口的【常量】。
1.定义格式
public static final 数据类型 常量名称 = 数据值;
注意:一旦使用final关键字进行修饰,说明不可改变。
2.接口中常量的使用
接口中常量的使用非常简单,下面进行简单示例:
首先我们定义一个接口:
public interface MyInterfaceConst {
// 这其实就是一个常量,一旦赋值,不可以修改
public static final int NUM_OF_MY_CLASS = 13;
}
然后我们定义一个测试类,在main方法中实现对接口的访问:
public class Demo05Interface {
public static void main(String[] args) {
// 访问接口中的常量
System.out.println(MyInterfaceConst.NUM_OF_MY_CLASS);
}
}
3.注意事项
- 接口当中的常量,可以省略public static final,注意:不写也照样是接口中的常量。
- 接口当中的常量,必须进行赋值,不能不赋值。
- 接口中常量的名称,使用完全大写的字母,用下划线进行分隔(推荐命名规则)
三、接口小结
在Java 9+版本中,接口的内容可以有:
-
成员变量其实是常量,格式:
[public] [static] [final] 数据类型 常量名称 = 数据值;
注意:常量必须进行赋值,而且一旦赋值之后不能改变。常量名称完全大写,用下划线进行分隔。 -
接口中最重要的就是抽象方法,格式:
[public] [abstract] 返回值类型 方法名称(参数列表);
注意:实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类。 -
从Java 8开始,接口里允许定义默认方法,格式:
[public] default 返回值类型 方法名称(参数列表) { 方法体 }
注意:默认方法也可以被覆盖重写 -
从Java 8开始,接口里允许定义静态方法,格式:
[public] static 返回值类型 方法名称(参数列表) { 方法体 }
注意:应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法 -
从Java 9开始,接口里允许定义私有方法,格式:
普通私有方法:private 返回值类型 方法名称(参数列表) { 方法体 }
静态私有方法:private static 返回值类型 方法名称(参数列表) { 方法体 }
注意:
private的方法只有接口自己才能调用,不能被实现类或者别人使用。