当前位置: 首页 > 知识库问答 >
问题:

在jdk-8的java标准库中有没有使用抽象类和接口的例子?[副本]

祁承嗣
2023-03-14

例如,在java教程(https://docs.oracle.com/javase/tutorial/java/iandi/abstract.html)中,AbstractMap类被用作抽象类的示例。既然jdk8中的接口方法现在可以是默认的或静态的,那么(除了它已经存在并且以前有意义的事实之外)AbstractMap不可能是一个接口,还有什么理由吗?据我所知,jdk8后剩下的区别是:

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

看起来,如果从头开始,一个接口在大多数情况下都提供了基本相同的功能,决定使用哪一个可以归结为第1点和第2点,而不考虑第3点是扩展接口功能的原因。

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

共有1个答案

裴星洲
2023-03-14

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

例如abstractlist#removerange(int,int)。还有一个列表中的No.1的例子(有一个受保护的字段)。

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

 类似资料:
  • 现在接口也有了一些以体作为抽象类的方法,那么java 8中的抽象和接口有什么区别。

  • 据我所知,唯一剩下的区别(除了一些潜在的效率问题之外)是抽象类遵循传统的Java单继承,而接口可以有多继承(或者多实现,如果你愿意的话)。这又引出了另一个问题-- 新的Java8接口如何避免菱形问题?

  • 考虑到接口现在可以为它所提供的方法提供一个实现,我无法恰当地将接口和抽象类之间的区别合理化。有没有人知道如何恰当地解释这种差异? 我还被告知,在性能方面,接口比抽象类更轻量级。有人能证实这一点吗?

  • 现在,我们知道Java 8在接口中引入了默认和静态方法。 接口最初在Java中引入是为了避免C++中出现的菱形问题,在多重继承中。 但是,随着Java8在接口中引入默认方法,现在,Java也引入了菱形问题,它在以前的版本中避免了这个问题。 默认方法不是必须重写的。 但是当使用接口发生菱形问题时,实现这些接口的类必须重写默认方法。 null PS我在互联网上没有找到任何关于这方面的好文章的链接。 他

  • 问题内容: 在面试中,有人问我以下问题。我试图回答这个问题,但是我想确切回答这个问题。 如果我可以将Abstract类模拟为Interface,为什么Java提供了Interface? 这意味着如果在Abstract类中我可以将所有方法标记为abstract,然后abstract类将用作接口,那么为什么我需要接口。 谁能简单地解释一下我。 问题答案: 这是一个非常标准的面试问题。答案是:因为您可以

  • 本文向大家介绍Java中的接口和抽象类用法实例详解,包括了Java中的接口和抽象类用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java中的接口和抽象类用法。分享给大家供大家参考,具体如下: 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类往往用来表