接口的所有方法都是抽象的吗?

2022-09-04 19:50:08

我看到它写在大多数地方 -

"All of the methods in an interface are abstract."

但是接口还可能包含和 和 方法体存在默认方法和静态方法。default methodsstatic methods

那么所有接口的方法都是抽象的吗?


答案 1

从Java 8开始,接口还可以包含默认方法和静态方法以及抽象方法。默认方法和静态方法存在方法主体。

Java 8中最大的设计变化之一是接口的概念。在Java 7之前,我们在接口中只能有方法声明。但是从Java 8开始,我们可以在接口中使用默认方法和静态方法。

接口默认方法

为了在接口中创建默认方法,我们需要将“default”关键字与方法签名一起使用。

接口静态方法

静态方法类似于默认方法,只是我们不能在实现类中重写它们。此功能有助于我们在子类中实现不良的情况下避免意外结果。

欲了解更多信息,请查看


答案 2

这是正确的

它的所有方法都是抽象的,无论其访问修饰符如何。

@coder的完美解释:

接口就像一个“纯”抽象类。该类及其所有方法都是抽象的。抽象类可以具有已实现的方法,但类本身不能实例化(对于继承和遵循 DRY 很有用)。

对于接口,由于根本没有任何实现,因此它们对于它们的目的很有用:契约。如果实现接口,则必须在接口中实现方法。

因此,不同之处在于抽象类可以具有实现的方法,而接口则不能。

它们是分开的原因是,一个类可以实现多个接口。Java 和 C# 将类限制为单个父类固有的类。有些语言允许您从多个类继承,并且您可以通过“纯”抽象类完成接口的工作。但多重继承有其问题,即可怕的钻石问题

看看Oracles关于抽象方法和类的文档。