一、default简介
1、简介
Java 8 新增了接口的默认方法,用default来修饰的方法即为默认方法,该接口的子类可以不实现默认方法。
在Java 8 之前,当需要修改接口时候,需要修改全部实现该接口的子类,以保证接口方法在子类中都有实现。当需要在现有接口中增加一个方法时,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。使用default修饰新增的接口方法时,其实现类是不需要必须实现该方法的,这样就避免了大量接口实现类改动的麻烦。
2、语法
在接口方法前添加default关键字,并编写方法体
public interface Interface1 {
default void m1(){
System.out.println("Interface1 default method");
}
}
二、default方法的使用
1、使用接口的default方法
以List为例:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().forEach(System.out::println);
这里调用的stream方法是父接口Collection中的默认方法,List对象可以直接调用该方法
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
2、子类实现default方法
以ArrayList为例:
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.removeIf(v -> v == 3);
list.stream().forEach(System.out::println);
在ArrayList中重写了removeIf默认方法,在调用时调用重写的方法
默认方法在调用上跟普通方法是一样的。
三、使用接口的static方法
定义静态方法
public interface Interface2 {
static void m2(){
System.out.println("interface2 static method");
}
}
调用静态方法
Interface2.m2();
静态方法只能被定义的接口调用, 而不能被继承或覆盖
总结
本文仅仅简单介绍了jdk8 中新引入的default关键字。