default关键字

default是在java8中引入的关键字,被default标识的方法也可称为Virtual extension methods——虚拟扩展方法。

Virtual extension methods:在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。

例如Iterable接口中的forEach和spliterator方法:

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

    default Spliterator spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }

注意:

  1. 在接口中编写default修饰的方法时,必须有方法体
  2. 接口用static和default修饰的方法都要有方法体,其中被static修饰的方法表示该接口的静态方法(即属于这个接口(类)的方法,不可被继承当然也就不存在重写Override,但是可以被调用)
  3. 本类的对象可以直接调用本类的公有成员方法
  4. default关键字有利有弊,弊端在于default关键字将抽象类和接口之间的一个显著区别抹平了,即接口只能有抽象方法,不提供子类方法的具体实现,而抽象类可以有非抽象的方法

你可能感兴趣的:(default关键字)