为什么java8新特性提供了给接口写默认方法呢?

关于jdk8提供的接口默认方法,之前一直都没想过为啥明明抽象类就可以提供默认方法,还需要提供接口的默认实现。现在来想想看看。

JAVA8更新后,接口就可以添加默认方法和静态方法:

  • 默认方法用default修饰符修饰,会被其他接口继承,可修改;
  • 静态方法使用static修饰符修饰,不可修改,直接通过接口调用;

0 为什么要给接口提供实现方法而不是直接用抽象类呢?

  • 第一 我觉得主要是为了兼容JDK1.8之前的版本,之前想给实现类加一个默方法就必须加一个方法让所有实现类去实现,那么其实有时候我们想要的结果是提供默认处理方法,在扩展已有接口的同时而不会影响他的实现类,就如Collection接口,如果每个集合都需要进行stream操作的话,比较麻烦。
  • 第二 抽象类是单继承的,而我们接口是多实现的,更易于扩展。

一.为什么要提供接口的默认实现方法?

私以为是因为许多时候我们有些方法并不想每个实现类都去实现一次默认方法,定义一些自己的处理逻辑,这样的话我们就需要使用一个接口默认实现方法来做到了。每个实现类只需要实现该接口就可以把默认方法给继承下来了。

java是多实现的,因此如果我们实现了多个接口,他们有着同样的方法签名,那么我们可以进行方法的重写,定义自己到底需要怎样的逻辑处理。

二. 为什么要提供静态方法

上述说的默认方法是可以进行重写的,这里接口的静态方法实现就是不可以进行重写的。只能通过接口点的方法的方式进行调用.相当于提供了更加安全的不可变方法。

三 其他

一个小的注意点。
这里有个类优先原则:如果父类中有跟接口默认方法相同签名的方法,则使用父类中的方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容