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

抽象方法与默认方法的区别[重复]

蔚弘量
2023-03-14

抽象方法和默认方法有什么区别?

在从“贵族”那里知道答案之前,我认为默认方法不同于defender方法,默认方法只不过是接口内部的抽象方法(没有关键字abstract)。这两个错误的观念导致这个愚蠢的问题被提出来。我从来不想问一个已经“问得很好,回答得很好”的问题来麻烦大家。

我想删除这个问题,但我没有,因为两个原因-1。stackoverflow阻止了我,2。贵族的回答是出神入化的。

共有1个答案

曾瀚昂
2023-03-14

抽象方法是没有方法体的方法。本质上,它们只是方法声明,仅由方法签名组成。

示例:

public abstract void hello(int i);

抽象方法可以在接口中,也可以在抽象类中。请注意,在接口中,默认情况下方法是抽象的,因此abstract修饰符通常被省略。

示例:

default public void otherHello(int i) {
    System.out.println("Hello");
}

下面是一个具有抽象和默认方法的接口以及实现该接口的类的有效示例:

public interface Hello {

    public abstract void hello(int i);

    default public void otherHello(int i) {
        System.out.println("Hello");
    }
}

public class Hi implements Hello {

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

  • Java 8接口默认方法与抽象类中的非抽象方法--两者之间有什么区别吗(除了iface-class、可见性等的区别之外) 默认方法是不是在Java中倒退了一步,意味着它违背了Java多年来宣传的本质?!

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

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

  • 当我注意到现在可以在接口中定义静态和默认方法时,我正在通过接口学习。 请解释两者的区别,如果有一个我们什么时候会使用它的例子,那就好了。界面上有点混乱。

  • 问题内容: 我接受了一次采访,面试官首先问我抽象类与所有抽象方法和接口之间的区别是什么。 我回答说,如果将来需要继承某些东西,并且已经扩展了一个类,那么您将无法做到这一点。 然后,他说,在这种情况下,您将永远不必扩展任何其他课程,而您必须执行合同。在这种情况下,最好使用抽象类或接口? 我告诉他您可以使用其中任何一个,但他并不满意。我不明白为什么-我认为这是开发人员/设计的选择。 问题答案: 表示接