zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

2023-04-18 16:12:54 时间

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

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

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

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

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

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

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

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

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

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

三 其他

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