在jdk-8的java标准库中是否有抽象类与接口的使用示例?

在jdk-8的java标准库中是否有抽象类与接口的使用示例?,java,java-8,interface,abstract-class,Java,Java 8,Interface,Abstract Class,例如,在java教程中,AbstractMap类用作抽象类的示例。既然jdk8接口方法现在可以是默认的或静态的,那么除了它已经存在并且以前认为AbstractMap不可能是接口这一事实之外,还有其他原因吗?据我所知,jdk8之后的剩余差异是: 抽象类可以用来抽象不受静态最终字段约束的状态,并且可以在接口不能使用的地方使用构造函数。 多个接口可以由相关或不相关的类实现,而只有一个类可以扩展。 接口增加的功能是为了保持向后兼容性。 看起来,如果从头开始,一个接口在大多数情况下都会提供大致相同的功能,

例如,在java教程中,AbstractMap类用作抽象类的示例。既然jdk8接口方法现在可以是默认的或静态的,那么除了它已经存在并且以前认为AbstractMap不可能是接口这一事实之外,还有其他原因吗?据我所知,jdk8之后的剩余差异是:

抽象类可以用来抽象不受静态最终字段约束的状态,并且可以在接口不能使用的地方使用构造函数。 多个接口可以由相关或不相关的类实现,而只有一个类可以扩展。 接口增加的功能是为了保持向后兼容性。 看起来,如果从头开始,一个接口在大多数情况下都会提供大致相同的功能,而决定使用哪种接口归结为第1点和第2点,而不管第3点是扩展接口功能的原因


我有什么遗漏吗?在jdk8或jdk8之后制作的标准库类是否有任何例子可以说明这些差异?我正在学习,如果我忽略了什么,请原谅。

列表中缺少的一点是受保护的方法。接口只能有公共接口。因此,如果您有一个模板方法模式,希望子类实现一些东西,但不将其公开为公共API,那么您不能使用接口来实现

一个例子可以是AbstractListRemoveAngeInt,int。另外,列表中1号的例子有一个受保护的字段


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

列表中缺少的一点是受保护的方法。接口只能有公共接口。因此,如果您有一个模板方法模式,希望子类实现一些东西,但不将其公开为公共API,那么您不能使用接口来实现

一个例子可以是AbstractListRemoveAngeInt,int。另外,列表中1号的例子有一个受保护的字段


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

应该有很多if示例。不知道为什么你没有找到。你能找到一个抽象类有一个受保护的方法的例子吗?它可能是一个接口吗?@pafau k。我可能很困惑,但你不能吗?即使它是一个公共默认接口方法,您是否也需要实现才能使用它?即使它说是公共的,它也没有得到有效的保护吗?如果不是由一个子类实例化的话,它应该是不可用的,而这个子类应该在技术上阻止公共范围不?答案中对此进行了扩展,对于注释来说有点太长了。如果有示例,应该有很多。不知道为什么你没有找到。你能找到一个抽象类有一个受保护的方法的例子吗?它可能是一个接口吗?@pafau k。我可能很困惑,但你不能吗?即使它是一个公共默认接口方法,您是否也需要实现才能使用它?即使它说是公共的,它也没有得到有效的保护吗?如果不是由一个子类实例化的话,它应该是不可用的,该子类应该在技术上阻止公共范围不?答案中对此进行了扩展,对于commentAbstractList来说有点太长了,它还强调了实现列表接口的某种方式,即首先服务于随机访问列表,比如有一个抽象的getint方法,并在其上提供迭代器实现。相反,AbstractSequentialList有一个抽象listIteratorint方法,并提供了一个getint方法。由于接口应提供合同,而无需在有选择的情况下指定特定的实现,因此针对特定实现定制的基本实现不应作为默认方法提供。AbstractList还强调了实现List接口的某种方式,也就是说,首先服务于随机访问列表,比如有一个抽象的getint方法,并在此基础上提供迭代器实现。相反,AbstractSequentialList有一个抽象listIteratorint方法,并提供了一个getint方法。由于接口应提供合同,而无需在有choic时指定特定的实现 e、 为特定实现定制的基本实现不应作为默认方法提供。