Java|Java8中你可能不知道的一些地方之接口默认方法实战( 二 )


方法使用 Java8 开发应用程序 , 子类实现多个接口时 , 对于接口默认方法定义允许定义多个默认方法 , 并且接口默认方法可能会出现同名情况 , 此时对于子类在实现或者调用时通常遵循以下原则:
1.类中的方法优先级最高
2.如果第一条无法进行判断 , 那么子接口的优先级更高:函数签名相同时 , 优先选择拥有最具体实现的默认方法的接口 , 即如果B继承了A , 那么B就比A更加具体
示例代码如下:
三、接口静态方法接口中除了允许定义多个默认方法之外 , Java8 也允许在接口中定义多个静态方法 , 静态方法即通过 static 修饰的方法 。 接口中静态方法也必须提供实现 , 提供了可以直接通过接口调用方法的方式 。
接口中的静态方法只能通过接口本身去调用 , 类似于 Class 中的静态方法 , 不存在默认方法中的多继承问题 , 静态方法并不能在实现类中被覆写 , 实现类中可以声明相同的方法 , 但这两个方法之间除了名字相同 , 并没有 Override 关系 。
四、接口默认方法实战4.1 网站活跃TOP3用户遍历这里以博客网站举例 , 比如统计每个月网站前三活跃用户(按用户文章发表量评判) , 使用集合遍历操作来使用接口默认方法 , 对于测试数据如下:

  • 「增强for实现」

  • 「自定义接口默认方法」

  • 「使用增强的Iterable接口默认方法」

4.2、网站活跃TOP3用户排序这里以博客网站举例 , 比如统计每个月网站前三活跃用户(按用户文章发表量评判) , 使用集合排序操作来使用接口默认方法 , 对于测试数据如下:
  • 「Collections.sort 工具类方法实现排序」

  • 「增强的List接口默认sort方法」
借助 Java8 增强的 List 接口默认 Sort 方法实现集合排序操作
  • 「Stream流sorted 方法实现排序(这里先做了解!)」
Stream 流提供了针对集合的多种操作 , 这里借助 Stream 的 sorted 实现集合元素排序操作 , 后续会对 Stream 做详细介绍 。
五、接口默认方法与静态方法的优势「1、接口的兼容性得到解决」
使用接口编程的好处是 , 开发是面向抽象而不再是面向具体来编程 , 使得程序变得很灵活 , 缺陷是 , 当需要修改接口时候 , 此时对应实现该接口的类需要全部修改 , 举个例子 ,java 8 之前对于我们常用的集合框架没有 foreach 方法 , 通常能想到的解决办法是在 JDK 里给相关的接口添加新的方法及实现 。 从 Java8 开始 , 引入了接口默认方法 , 这样的好处也是很明显的 , 首先解决了 Java8 以前版本接口兼容性问题 , 同时对于我们以后的程序开发 , 也可以在接口子类中直接使用接口默认方法 , 而不再需要再各个子类中各自实现响应接口方法 。
「2、子类在实现接口方法时灵活度更高」
子类在实现接口时 , 可以按需重写 , 不再向 Java8 以前接口方法必须全部实现 , 同时接口默认方法可以在子类中直接进行调用 , 灵活度比较高 。
「3、开发中避免大量工具类创建」
接口中引入静态方法 , 对于原有项目开发中出现大量的工具类大量静态方法的代码便可以迁移到接口中定义与实现 , 省去大量工具类的创建 。
「4、提升了对Lambda表达式的支持」
Lambda 是针对只有一个抽象方法的接口来说的 , 接口中引入接口默认方法与静态方法 , 在对接口这些方法进行调用时 , 可以引入 Lambda 表达式简化了原有代码的书写形式 , 使得代码变得更加简洁 。


推荐阅读