在jdk8之前,接口中只有抽象方法。
1、接口引入默认方法
1.1 原因
一个接口如Map,其有几十个接口的实现。
如果有一天,我们需要为Map接口添加一个抽象方法,那么我们所有的实现类都需要去实现这个方法,其工程量十分巨大。
为此,在JDK8中,为接口新增了默认方法。
接口中的默认方法,实现类不必重写,可以直接使用,实现类也可以根据需要重写。这就方便了接口的拓展。
格式:在默认方法前面加上default修饰
interface A{
public default void test(){
System.out.println("interface aa");
}
}
1.2 使用方法
-
实现类直接使用
-
实现类重写默认方法
2、接口引入静态方法
目的:方便接口扩展
格式:在默认方法前面加上static修饰
interface A{
public static void test(){
System.out.println("interface aa");
}
}
使用方法
public class Demo02StaticFunction {
public static void main(String[] args){
E e = new E();
// e.test() 实现类无法直接调用静态方法
// 通过接口直接调用
D.test();
}
}
interface D{
public static void test(){
System.out.println("D static function");
}
}
class E implements D{
}
3. 接口默认方法和静态方法的区别
1、默认方法通过实例调用,静态方法通过接口名调用
2、默认方法可以被继承,实现类可以直接使用接口默认方法,也可以重写默认方法
3、静态方法不能被继承,实现类不能重写接口静态方法,只能使用接口名调用。
如果某个方法需要被实现类继承或重写,则使用默认方法,如果不需要继承就是用静态方法。