​ 有在读Jdk9的持有对象源代码,然后读到了Iterator.java文件,接口中定义了四个方法:

1
2
3
4
boolean hasNext()
E next()
default void remove(){}
default void forEachRemaining(){}

​ 在接口的方法定义中发现了一个关键字:default,并不能理解这个关键字,然后去百度查了一下定义。

    接口允许确定方法名、参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体实现(Think in java),在《Think in Java》一书的描述中,JavaSE5中对接口的限定是非常明确的。在java8中,引入了新的概念default方法,也可以成为Defender方法,或者虚拟扩展方法。

    Default方法是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。(Default methods enable you to add new functionality to the interfaces of your libraries and ensure binary compatibility with code written for older versions of those interfaces.)

    诚然,这个关键字真正的给后期维护在扩展接口时候提供了非常强的帮助。但是,Java坚持了这么多年的通过接口来防止多重继承容易造成二义性这一回事,因为这个关键字,转了一圈又回来了。img