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

Java 8中抽象类对接口的偏好

胡安怡
2023-03-14

现在,我们知道Java 8在接口中引入了默认和静态方法。
接口最初在Java中引入是为了避免C++中出现的菱形问题,在多重继承中。

但是,随着Java8在接口中引入默认方法,现在,Java也引入了菱形问题,它在以前的版本中避免了这个问题。

默认方法不是必须重写的。
但是当使用接口发生菱形问题时,实现这些接口的类必须重写默认方法。

    null

PS我在互联网上没有找到任何关于这方面的好文章的链接。
他们所说的只是抽象类给你更多的具体性。
就像在里面,抽象类可以有构造函数,但接口不能。

所以,我想知道,如果抽象类更具体,并且可以有构造函数,
而且Java已经引入了菱形问题,为什么我们现在还要有接口呢?抽象类作为一个独立的多继承类难道不足够好吗?

共有1个答案

薛弘济
2023-03-14

不,它没有重新引入菱形问题,因为接口仍然不能有任何状态,默认方法可能不是最终的。

因此,当您选择实现两个接口时,您仍然拥有实现默认方法的所有自由,可以选择提供的默认实现之一,也可以提供自己的实现。但是从两个接口继承冲突的状态,或者继承两个不同的final方法而无法解决冲突,都不会有问题。

所以,下面是你问题的答案:

    null
 类似资料:
  • 我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗

  • 接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的,如下所示:class Box { public: // 纯虚函数 virtual double getVolume() =

  • 问题内容: 我被问到一个问题,我想在这里让我的答案复习。 问:在哪种情况下,扩展抽象类而不是实现接口更合适? 答:如果我们使用模板方法设计模式。 我对么 ? 很抱歉,如果我不能清楚地说明问题。 我知道抽象类和接口之间的基本区别。 1)在要求如此的情况下使用抽象类,即我们需要为特定操作(实现方法)在每个子类中实现相同的功能,而为某些其他操作(仅方法签名)实现不同的功能 2)如果需要使签名相同(且实现

  • 我试图给出一个完整的答案: "为什么/何时使用抽象类而不是接口。" 并寻找以下方面的验证/建议。 对此的一个答案是, 在具体类来定义特定类型之前,抽象类通常位于继承层次结构中接口的正下方(就像Java API中的许多示例一样),实现并固定接口定义的结构的一些公共方面。 使用抽象类的另一个很好的理由是类型之间有一个清晰的逻辑层次结构。抽象类具有组织层次结构的作用,同时通过作为抽象类而不是具体类,迫使

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

  • 问题内容: 谁能告诉我完全抽象的类和接口之间到底有什么区别? Abstract类也可以将其所有方法都作为abstract。接口的所有方法均为抽象。在这种情况下,两者之间的主要区别是什么? 纯抽象类和接口之间是否有区别?接口有什么用?在使用接口的地方,我们可以使用纯抽象类吗? 问题答案: 要完成以前的答案: 接口是一个“合同”。如果一个类实现一个接口,则它必须提议该接口中列出的所有服务。 抽象类是骨