default关键字

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

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

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

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

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

注意:

  1. 在接口中编写default修饰的方法时,必须有方法体
  2. 接口用static和default修饰的方法都要有方法体,其中被static修饰的方法表示该接口的静态方法(即属于这个接口(类)的方法,不可被继承当然也就不存在重写Override,但是可以被调用)
  3. 本类的对象可以直接调用本类的公有成员方法
  4. default关键字有利有弊,弊端在于default关键字将抽象类和接口之间的一个显著区别抹平了,即接口只能有抽象方法,不提供子类方法的具体实现,而抽象类可以有非抽象的方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • jdk1.8之前,接口里的方法都是抽象方法,需要它的具体实现类去实现,jdk1.8以后,增加default关键,让...
    李翾阅读 1,607评论 0 0
  • 在阅读Collection源码时,发现Collection接口继承了接口Iterable,Iterable内部有两...
    yuruihua阅读 1,357评论 1 0
  • =default关键字使用的地方 The "default" mechanism can be used for ...
    Roland阅读 5,533评论 1 2
  • 泛型Default关键字 在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型...
    幻凌风阅读 362评论 0 0
  • 好奇指向趣味,一块颜色鲜艳的石头,旁人抬头望天的姿态。 好奇的背后也往往是发现,理论研究或生活器物的完善。 所有的...
    周淡皮阅读 133评论 0 0