以前看一段java8的代码,发现接口均可以实现方法了,固然在老的教程里面是会告诉咱们接口只是定义了方法的,为何Java8要这样设计呢?看到一句话,既在不破坏java现有实现架构的状况下能往接口里增长新方法,引入Default方法到Java8,正是为了这个目的:优化接口的同时,避免跟现有实现架构的兼容问题。java
看java8比较大的改动就是引入Lambdas表达式,不少接口中加入了相应的方法,好比下面的Iterable接口中增长了foreach的实现。若是在java以前的版本,在接口中定义了方法,咱们实现接口的类,必需要实现,不然编译会报错,因此要想在某个接口中增长方法,而不修改现该接口现有的实现类,这是不可能作到的。可是按照咱们Lambdas的编写,Default应时而生。架构
固然在collection接口有咱们一直用的Stream操做。优化
而后用起来就很神奇了,若是我定义了两个接口都是default方法,那么写个类实现这两个方法,这不就是多继承吗?其中若是有相同的方法,那么这个类是要从新实现如下。其实我以为咱们在正常使用中,仍是按照java7以前的原则写吧,由于通常业务咱们没有很复杂的这种设计和关系。而在可是对于Java集合API的优化升级,并达到无缝地结合Lambda表达式来讲,Default 方法是相当重要的特性。设计
若是不是考虑兼容,那么留着抽象类还有什么用呢?由于抽象类还能够有状态呀,还暂时没法彻底替代抽象类。能够发如今Java9中不用default,也能够定义非公有的方法,下面我随便写了一个,还不知道java9中的目的是什么。将来的Java版本的接口可能会有更强的功能,或许能更大程度地替代本来须要使用抽象类的场景。继承
接口这是要上天呀!教程