接口中也可以有方法的实现了

59 阅读1分钟

在Java8中,对于接口,新增了以下特性:

  1. 允许在接口中增加静态方法
  2. 可以为任何接口方法提供一个默认实现

我们知道,在以往,接口中只能给出方法的声明,关于具体实现只能在实现类中给出。在API手册中,往往会看到成对出现的接口实用工具类(eg:Path和Paths),这是因为接口不能给出方法的实现,所以将需要使用的静态方法放在与之对应的伴随类中。 但在Java8以后,我们可以将静态方法写在接口中了,就不需要再为工具方法提供另一个伴随类了。

例如:

public interface A{
    static int a(){
       return 0;
    }
}

现在,我们也可以为接口中的任何一个方法提供一个默认实现

例如:

public interface A{
    default int a(){
        return 0;
    }
}

这为我们提供了一些便利:

  1. 我们实现接口时可以只覆盖会用到的方法(前提是其余的方法提供有默认实现)。当然这不是最明智的选择,但有时也需要这样做。
  2. 默认方法的一个重要用法是接口演化

当一个接口中的默认方法和另一个接口中的默认方法或超类中的方法产生冲突时,遵循以下规则:

  1. 超类优先。
  2. 如果是两个接口中的默认方法冲突,那就必须覆盖这个方法来解决冲突。

如果你已经看到了这里,那么可以麻烦您点个赞么,笔者在这里先行谢过。