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

2022-08-31 07:45:12

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

这样做有什么好处?

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

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

澄清:我不是在问为什么接口方法是抽象的,这是显而易见的。我在问为什么人们会明确选择将它们标记为抽象,因为如果它们在界面中,它们无论如何都是抽象的。


答案 1

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

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


答案 2

eclipse 中的“The Benefice”(在接口方法声明上添加抽象)将是 jdk1.3 中与 jdt eclipse 编译器的一个旧的兼容性问题

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

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