我看到它写在大多数地方 -
"All of the methods in an interface are abstract."
但是接口也可能包含default methods
和static methods
,并且存在默认方法和静态方法的方法体。
界面抽象的所有方法都是这样吗?
答案 0 :(得分:8)
从Java 8开始,接口也可能包含默认方法和静态方法以及抽象方法。存在默认和静态方法的方法体。
Java 8中最大的设计变化之一就是概念 接口。在Java 7之前,我们只能使用方法声明 接口。但是从Java 8开始,我们可以使用默认方法和 接口中的静态方法。
接口默认方法
要在界面中创建默认方法,我们需要使用 带有方法签名的“default”关键字。
接口静态方法
静态方法与默认方法类似,但我们不能 在实现类中覆盖它们。此功能可以帮助我们 避免不良后果导致儿童执行不力 类。
有关详情,请查看this
答案 1 :(得分:7)
这是正确的
所有方法都是抽象的,无论其访问修饰符如何。
@coder的完美解释:
上查看Oracles文档接口就像一个“纯粹”的抽象类。该方法的类和 所有 都是抽象的。抽象类可以实现 方法但类本身无法实例化(对于 继承和跟随DRY)。
对于接口,因为根本没有任何实现 对他们的目的有用:合同。如果您实现了接口 那么你必须在界面中实现这些方法。
所以区别在于抽象类可以实现方法 而界面不能。
它们是分开的原因是一个类可以实现几个 接口。 Java和C#将类限制为单个类 父母班。某些语言允许您从多个语言继承 类,你可以通过一个完成接口的工作 “纯粹的”抽象类。但多重继承有其问题, 即可怕的钻石问题
答案 2 :(得分:1)
根据Jeanne Boyarsky& amp; Scott Selikoff的书,OCA:Oracle®认证助理Java SE 8程序员I学习指南考试1Z0-808。
。 。 。因为在Java 8之前所有的接口方法 将被假定为抽象的。由于Java 8现在包含默认和静态 方法并且它们永远不是抽象的,您不能假设抽象修饰符将被编译器隐式应用于所有方法。 (第346页)
答案 3 :(得分:1)
java接口中的所有方法都是抽象的,只有它们被显式声明为static o默认情况下它们不是抽象的。
答案 4 :(得分:0)
界面中的所有方法都是抽象的。这句话是真的。 接口必须只有抽象方法才能应用多重继承。
答案 5 :(得分:0)
是的,接口只能有抽象方法。
在Java编程语言中,接口是引用类型,类似于类,只能包含常量,方法签名,默认方法,静态方法和嵌套类型。方法主体仅适用于默认方法和静态方法。接口无法实例化-它们只能由类实现或由其他接口扩展。
来源:https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
答案 6 :(得分:-2)
界面中的所有方法 摘要,默认情况下,JAVA中的字段为静态,公开和最终 所有成员都是公开
我们无法使界面的成员私有和受保护。