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

Java 8默认方法与抽象类中的非抽象方法

左丘子平
2023-03-14

Java 8接口默认方法与抽象类中的非抽象方法--两者之间有什么区别吗(除了iface-class、可见性等的区别之外)

默认方法是不是在Java中倒退了一步,意味着它违背了Java多年来宣传的本质?!

共有1个答案

孟品
2023-03-14

当抽象类的具体子类调用super()(如果它被重写)时,将调用抽象类中的非抽象方法。所以有多种可能性。如果未重写方法,则将执行超类方法。如果我们在具体的子类方法中使用super(),那么将执行具有超类方法的重写方法。

其中作为Java8接口的默认方法是完全不同的。它为开发人员提供了在实现类中实现或不实现方法的选择。如果该函数未实现,则只执行默认方法。

可能的用例:

JDK库中这个新特性最重要的用例是扩展现有接口而不破坏现有实现器的可能性:向接口添加一个新的抽象方法将需要所有实现类来实现这个新方法

 类似资料:
  • 问题内容: Java 8接口默认方法与抽象类中的非抽象方法-两者之间是否有任何区别(除了iface-类,可见性等不同) 默认方法不是Java的后退一步,是否违反Java多年来宣传的本质? 问题答案: 如果抽象子类的具体子类被super()覆盖,则抽象类中的非抽象方法将被调用。因此,存在多种可能性。如果不重写method,则将执行超类方法。如果我们在具体的子类方法中使用super(),则将执行被超类

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

  • 这似乎是一个基本问题。但在采访前需要澄清。 我在抽象类中有一个非抽象方法。它的具体类重写了该方法。但我想调用父类的原始方法来调用,而不是重写方法。有什么办法吗? 据我所知,没有办法调用原始方法?

  • 我正在尝试对扩展抽象基的类进行单元测试。以下是“类似的类”,以供说明: 下面是我正在尝试的单元测试: 当我做这个测试的时候 java.lang.NullPointerException 在中 我知道自动连线的“滤水器”没有初始化。但接下来,我只想在我的单元测试中模拟抽象的“非抽象”方法。 我该如何使用EasyMock来实现这一点呢?另外,我不知道和应该做什么。

  • 我想给出一个完整的答案: “为什么/何时使用抽象类而不是接口。” 并寻求对以下方面的验证/建议。 “一个原因是:接口方法都是公共的,字段成员都是常量(final和public)。您可能需要限制方法的访问权限和/或使它们在非常量状态下操作。 另一个是:子代类可以通过super调用抽象类方法,而它不能对默认接口方法调用抽象类方法。此外,接口没有可由后代调用的构造函数。 其余的原因与上面的pre-Jav

  • 抽象方法和默认方法有什么区别? 在从“贵族”那里知道答案之前,我认为默认方法不同于defender方法,默认方法只不过是接口内部的抽象方法(没有关键字abstract)。这两个错误的观念导致这个愚蠢的问题被提出来。我从来不想问一个已经“问得很好,回答得很好”的问题来麻烦大家。 我想删除这个问题,但我没有,因为两个原因-1。stackoverflow阻止了我,2。贵族的回答是出神入化的。