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

时间:2009-03-13 05:07:15

标签: java eclipse interface abstract

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

这有什么好处?

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

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

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

4 个答案:

答案 0 :(得分:142)

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

也就是说,由于Java具有向后兼容性的倾向,我真的怀疑是否存在abstract关键字会产生影响。

答案 1 :(得分: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个类库,因此大多数情况下不需要“抽象”。目前的日食项目。

答案 2 :(得分:37)

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

对于Java SE 5.0:“为了与旧版本的Java平台兼容,允许使用它,但不鼓励,为样式,冗余地指定接口中声明的方法的抽象修饰符。”

答案 3 :(得分:9)

根据JLS方法,接口默认是抽象的,因此关键字是多余的。知道了这一点,我决不会用它来“避免表现性的混乱”。