JDK8以前,接口内只能定义抽象方法;
JDK8,接口内允许定义默认方法、静态方法;
JDK9,接口内允许定义私有方法
default:默认方法
public interface Essay01 {
/**
* 在接口内定义默认方法
*/
public default void show(){
System.out.println("接口Essay01内定义的show()方法......");
}
}
需要注意以下3点:
(1)接口内定义的默认方法,public可以省略;
(2)默认方法不要求实现类必须重写,重写的话,default需要去掉;
(3)如果说接口继承的多个接口,有重名的默认方法,该接口必须重写父类重名的默认方法;
static:静态方法
public interface Essay01 {
/**
* 接口内的抽象方法
*/
void add();
/**
* 在接口内定义静态方法
*/
public static void show() {
System.out.println("接口Essay01内定义的show()方法......");
}
}
需要注意以下2点:
(1)接口内的静态方法,实现类不能覆写;不能覆写不是说覆写会报错,而是实现类如果定义了和接口静态方法一样的方法,是表明子类也定义了一个静态方法,不算是覆写;
(2)接口内的静态方法,只能通过接口名.方法名的方式来访问,不能通过实现类或者对象名.方法名的方式来访问
private:私有方法
public interface Essay01 {
/**
* 在接口内定义默认方法
*/
public default void add(){
log1();
System.out.println("接口Essay01内定义的add()方法......");
}
/**
* 在接口内定义静态方法
*/
public static void show() {
log2();
System.out.println("接口Essay01内定义的show()方法......");
}
/**
* 在接口内定义私有方法
*/
private void log1(){
System.out.println("记录日志信息......");
}
/**
* 在接口内定义静态私有方法
*/
private static void log2(){
System.out.println("记录日志信息......");
}
}
接口内使用私有方法的好处有两点:
1)简化代码:可以把接口内default()方法之间、static()之间方法代码相同的部分抽取出来,成为一个私有方法,后面有需要可以直接调用。默认方法调用私有方法,静态方法调用私有静态方法。
2)安全规范:私有方法不能被外界访问,只能在接口内使用,安全且规范