关于java:抽象方法和默认方法之间的区别

Difference between abstract methods and default methods

本问题已经有最佳答案,请猛点这里访问。

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

我知道这个问题以前有人回答过,但贵族们没有。

在知道"贵族"的答案之前,我认为默认方法不同于Defender方法,并且-默认方法只不过是接口内的抽象方法(没有关键字abstract)。这两个错误的概念导致这个愚蠢的问题被问到。我从来没有想过要问一个已经"问得好,回答得好"的问题来麻烦大家。

我想删除这个问题,但我没有删除,因为有两个原因——1.stackoverflow阻止了我,2.贵族们的回答是极好的。


抽象方法

抽象方法是没有方法体的方法。本质上,它们只是方法声明,只包含方法签名。

例子:

1
public abstract void hello(int i);

抽象方法可以在接口或抽象类中。注意,在接口中,默认情况下方法是抽象的,因此通常不使用abstract修饰符。

默认方法

默认方法是接口中提供了"默认"实现的方法。换句话说,实现接口的非抽象类不必重写接口中定义的默认方法。

例子:

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

例子

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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");
    }
}