【java8新特性】默认方法

欢迎交流java8新特性系列文章:https://www.jianshu.com/nb/27231419 . [1][2][3][4][5]

一、简介

     默认方法是指接口的默认方法,它是java8的新特性之一。顾名思义,默认方法就是接口提供一个默认实现,且不强制实现类去覆写的方法。默认方法用default关键字来修饰。

     默认方法可以解决的痛点
     在java8之前,修改接口功能通常会给接口添加新的方法,这时对已经实现该接口的所有实现类,都要一一添加对新方法的实现,换言之,在给接口定义新方法的同时无法不影响到已有的实现类,这时,java8的默认方法特性就可以解决这种接口修改与已有实现类不兼容的问题,比如java8中Iterable接口添加的forEach方法就是一个默认方法:

    default void forEach(Consumer action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

这样在java8中,可以对集合直接用forEach方法结合lambda表达式方便的实现集合的遍历计算。

二、默认方法的使用

2.1 实现多个接口有相同默认方法的解决

     注意:当一个类实现多个接口时,若多个接口中存在相同默认方法(方法名、参数、返回值相同),此时实现类必须要覆写默认方法

     覆写有两种方式:

  • 1、实现类自己实现方法逻辑
  • 2、采用super关键字来调用指定接口的默认方法, 如:
public interface TestInterface1
{
    default void test()
    {
        System.out.println("TestInterface1");
    }   
}

public interface TestInterface2
{
    default void test()
    {
        System.out.println("TestInterface2");
    }
}

public class Test implements TestInterface1, TestInterface2
{
    @Override
    public void test()
    {
        // 调用TestInterface1接口的默认test()方法
        TestInterface1.super.test();
    }
}
2.2 接口静态方法

     java8支持接口中定义静态方法(需要提供默认实现),写法上将默认方法的default关键字换成static关键字即可。

三、总结

     java8默认方法的使用还是比较简单的,且解决了java8之前给接口定义新方法的同时无法不影响到已有的实现类的痛点问题,比较实用。


  1. 【java8新特性】lambda表达式与函数式接口详解 ↩

  2. 【java8新特性】Stream API详解 ↩

  3. 【java8新特性】Optional详解 ↩

  4. 【java8新特性】方法引用 ↩

  5. 【java8新特性】默认方法 ↩

你可能感兴趣的:(【java8新特性】默认方法)