java函数式编程之接口Default方法<五>

之前看一段java8的代码,发现接口都可以实现方法了,当然在老的教程里面是会告诉我们接口只是定义了方法的,为什么Java8要这样设计呢?看到一句话,既在不破坏java现有实现架构的情况下能往接口里增加新方法,引入Default方法到Java8,正是为了这个目的:优化接口的同时,避免跟现有实现架构的兼容问题。

174416_QNev_2277632.png

看java8比较大的改动就是引入Lambdas表达式,很多接口中加入了相应的方法,比如下面的Iterable接口中增加了foreach的实现。如果在java之前的版本,在接口中定义了方法,我们实现接口的类,必须要实现,否则编译会报错,所以要想在某个接口中增加方法,而不修改现该接口现有的实现类,这是不可能做到的。但是按照我们Lambdas的编写,Default应时而生。

180404_0Drg_2277632.png

当然在collection接口有我们一直用的Stream操作。

181400_FFpX_2277632.png

然后用起来就很神奇了,如果我定义了两个接口都是default方法,那么写个类实现这两个方法,这不就是多继承吗?其中如果有相同的方法,那么这个类是要重新实现以下。其实我觉得我们在正常使用中,还是按照java7之前的原则写吧,因为一般业务我们没有很复杂的这种设计和关系。而在但是对于Java集合API的优化升级,并达到无缝地结合Lambda表达式来说,Default 方法是至关重要的特性。

如果不是考虑兼容,那么留着抽象类还有什么用呢?因为抽象类还可以有状态呀,还暂时无法完全替代抽象类。可以发现在Java9中不用default,也可以定义非公有的方法,下面我随便写了一个,还不知道java9中的目的是什么。未来的Java版本的接口可能会有更强的功能,或许能更大程度地替代原本需要使用抽象类的场景。

190652_XXOB_2277632.png

接口这是要上天呀!

转载于:https://my.oschina.net/u/2277632/blog/1580054

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值