为什么要声明一个Java接口方法是抽象的?
我今天使用Eclipse的“拉接口”重构function来创build基于现有类的接口。 提供的对话框用于创build新接口的所有新方法为“抽象”方法。
那会有什么好处呢?
我认为你被允许将接口方法声明为抽象的事实是这个语言的一个多余和无害的特征,并不是特别鼓励的。
为什么Eclipse会支持这种风格,或者为什么有人会自愿select这样做呢?
澄清:我不是问为什么接口方法是抽象的,这是显而易见的。 我在问为什么要明确地select把它们标记为抽象的,因为如果它们在一个接口中,它们是抽象的。
根据Java语言规范 ,接口的abstract
关键字已经过时,不应再使用。 (第9.1.1.1节)
这就是说,在Java向后兼容的倾向性方面,我真的怀疑这个abstract
关键字是否存在将永远有所作为。
eclipse中的“好处”(在接口方法声明中增加抽象)将会是jdk1.3中jdt eclipse编译器的旧兼容性问题
从1.4开始,jdk库不再包含默认的抽象方法(在实现接口的抽象类上)。
这是愚弄Eclipse 1.3编译器的诊断,因为它们的实现依赖于它们的存在。
请注意,Javac 1.3将完全拒绝执行1.4库(使用-bootclasspath选项)。
由于Eclipse编译器可能处于1.4合规性级别(请参阅Workbench>Preferences>Java>Compiler>JDK Compliance
),或者在使用1.3合规性模式时至less使用1.3类库,因此大多数情况下不需要“抽象”目前的eclipse项目。
从Java SE 7 JLS (Java语言规范):“这是允许的,但不鼓励作为风格的问题,冗余地指定在接口中声明的方法的公共和/或抽象修饰符。
对于Java SE 5.0 :“为了与旧版Java平台兼容,作为样式,允许但不鼓励冗余地指定在接口中声明的方法的抽象修饰符。
根据JLS方法,接口默认是抽象的,所以关键字是多余的。 知道这一点,我从来没有用它来“避免表象混乱”。