Java8允许我们给接口添加一个非抽象的方法实现只需要使用default关键字即可 为啥要做此改动

因为大家都觉得很有用,就这么简单。
譬如 Java 8 给 Collection 加入了一个 stream 方法,你可以想想如果没有默认函数的话,api 会变成多么鬼畜的样子。
对这个功能感兴趣的话,可以看看这个:http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v4.pdf,里面有对引入这个功能原因的说明:
Once published, it is impossible to add methods to an interface without breaking existing implementations. (Specifically, adding a method to an interface is not a source- compatible change.) The longer the time since a library has been published, the more likely it is that this restriction will cause grief for its maintainers.
■网友
因为引入函数式编程要添加太多接口,会有不向下兼容的风险,索性就给接口加上默认方法的特性,皆大欢喜。
■网友
当牵涉到修改一个流行了20年,有着最广泛最庞大库代码累计,目前业界最重要编程语言的一个核心语言概念时,既要兼容成千上万的代码,又要加入新的功能,这应该是唯一的选择。
■网友
主要还是为了兼容你想想新的collection里面多了很多新方法,如果没有默认实现,以前的代码都需要改一遍,这谁受得了
■网友
【Java8允许我们给接口添加一个非抽象的方法实现只需要使用default关键字即可 为啥要做此改动】 多继承吧,java只允许继承一个类,实现多个接口,之前想要实现多继承很费劲,要搞个内部类啥的(不懂的请自行查阅相关资料),现在加了这个可以实现方法的接口,就可以很轻易地实现多继承了


    推荐阅读