为什么将Java接口方法声明为抽象?

问题

我今天使用Eclipse的"拉接口"重构功能来创建基于现有类的接口。提供的对话框用于创建新接口的所有新方法作为"抽象"方法。

那有什么好处?

我认为你被允许将接口方法声明为抽象的这一事实是该语言的一个多余且无害的特性,并不是特别鼓励的。

为什么Eclipse会支持这种风格,或者为什么会有人自愿选择这样做呢?

澄清:我不是在问为什么接口方法是抽象的,这很明显。我在问为什么会明确地选择将它们标记为抽象,因为如果它们在界面中它们仍然是抽象的。


#1 热门回答(141 赞)

根据Java Language Specification,接口的abstract关键字已过时,不应再使用。 (第9.1.1.1节)

也就是说,由于Java具有向后兼容性的倾向,我真的怀疑它是否会出现abstract关键字会有所不同。


#2 热门回答(38 赞)

"eclipse的好处"(在接口方法声明中添加摘要)将是一个旧的兼容性问题jdt eclipse compiler in jdk1.3

从1.4开始,jdk库不再包含默认抽象方法(在实现接口的抽象类上)。这愚弄Eclipse 1.3编译器诊断,因为它们的实现依赖于它们的存在。请注意,Javac 1.3将完全拒绝对1.4库执行(使用-bootclasspath选项)。

由于Eclipse编译器可能处于1.4合规级别(参见Workbench>Preferences>Java>Compiler>JDK Compliance),或者如果使用1.3合规模式,则使用至少1.3个类库,因此在大多数当前的eclipse项目中不需要"abstract"。


#3 热门回答(35 赞)

来自theJava SE 7 JLS(Java语言规范):"允许但不鼓励作为样式,为接口中声明的方法冗余地指定公共和/或抽象修饰符。"

ForJava SE 5.0:"为了与旧版本的Java平台兼容,允许但不鼓励,但作为一种风格,不要为接口中声明的方法冗余地指定抽象修饰符。"