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

And*_*per 11 java android abstract-class interface

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

"All of the methods in an interface are abstract."
Run Code Online (Sandbox Code Playgroud)

但是接口也可以包含default methodsstatic methods存在默认方法和静态方法的方法体.

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

Tej*_*jjD 9

那是正确的

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

@coder的完美解释:

接口就像一个"纯粹"的抽象类.该类及其所有方法都是抽象的.抽象类可以实现方法,但是类本身不能被实例化(对继承和后续DRY有用).

对于接口,由于根本没有任何实现,它们对于它们的目的是有用的:合同.如果实现接口,则必须在接口中实现方法.

所以区别在于抽象类可以实现方法,而接口则不能.

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

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


And*_*per 9

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

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

接口默认方法

要在界面中创建默认方法,我们需要在方法签名中使用"default"关键字.

接口静态方法

静态方法与默认方法类似,只是我们不能在实现类中覆盖它们.此功能有助于我们避免在子类中实现不良而导致的不良结果.

欲了解更多请查看