接口的默认方法和静态方法

jdk8之前,interface方法不能有实现,但是从Java 8开始,接口被增强为具有实现方法。我们可以使用default和static关键字来创建具有方法实现的接口。例如Iterable接口中的forEach方法实现是:

  1. default void forEach(Consumer<? super Taction) {
  2. Objects.requireNonNull(action);
  3. for (T t : this) {
  4. action.accept(t);
  5. }
  6. }

示例代码

创建一个接口:

  1. public interface MyInterface {
  2. void show();
  3. default void showA() {
  4. System.out.println("我是接口默认方法");
  5. }
  6. static void showB() {
  7. System.out.println("我是接口静态方法");
  8. }
  9. }

创建该接口实现类:

  1. public class MyClass implements MyInterface {
  2. @Override
  3. public void show() {
  4. System.out.println("我是实现方法");
  5. }
  6. //默认方法支持重写,不覆盖则执行接口的默认方法
  7. @Override
  8. public void showA() {
  9. System.out.println("我覆盖了接口的默认方法");
  10. }
  11. //静态方法不可以重写
  12. }

测试:

  1. public class Test {
  2. public static void main(String[] args) {
  3. MyClass myClass = new MyClass();
  4. myClass.show();
  5. myClass.showA();
  6. //通过类名.方法名调用接口静态方法
  7. MyInterface.showB();
  8. }
  9. }