从 jdk-8 开始,java 标准库中是否有抽象 class 与接口使用的示例?

Are there any examples of abstract class vs interface use in the java standard libraries from jdk-8 on forward?

例如,在 java 教程 (https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html) 中,AbstractMap class 被用作抽象 class 的示例。自 jdk8 以来,接口方法现在可以是默认的或静态的,是否有任何理由(除了它已经存在 并且以前有意义 之外)AbstractMap 不可能是一个接口?据我了解,剩下的区别post jdk8是:

  1. 抽象 class 可用于抽象状态(不限于静态最终字段/并且可以有构造函数),而接口不能。
  2. 可以实现多个接口(通过相关或不相关的 classes),而只能扩展一个 class。
  3. 接口的新增功能是为了保持向后兼容性。

看起来如果从头开始,界面在大多数情况下会提供大致相同的功能,并且决定使用哪个归结为第 1 点和第 2 点,而不管第 3 点是扩展界面功能的原因.

有什么我遗漏的吗?在 jdk8 或 post jdk8 上制作的标准库 classes 是否有任何示例可以说明这些差异?正在学习中,如有遗漏请见谅

列表中缺少的一点是 protected 方法。一个接口只能有public个。因此,如果您有一个 模板方法模式 ,您希望子 class 实现某些东西,但不将其公开为 public API,你不能用界面来做到这一点。

例如 AbstractList#removeRange(int, int)。也是您列表中排名第一的示例(具有受保护的字段)。

现在,为什么 AbstractMap 不是新 API 中的接口,我不能代表 JDK 开发人员。一件事是 java.util 集合共享相似的设计,更改其中一个而不更改其他集合会破坏一致性。也有一些向后兼容性。即使就我个人而言,我也可能不会依赖于 class 而不是接口这一事实。