aio*_*obe 440
为什么接口被"声明"抽象是必要的?
不是.
public abstract interface Interface {
\___.__/
|
'----> Neither this...
public void interfacing();
public abstract boolean interfacing(boolean really);
\___.__/
|
'----> nor this, are necessary.
}
Run Code Online (Sandbox Code Playgroud)
接口及其方法是隐式的,abstract并且添加修饰符没有区别.
是否有适用于抽象接口的其他规则?
不,同样的规则适用.该方法必须由任何(具体)实现类实现.
如果抽象已经过时,为什么它包含在Java中?抽象界面有历史吗?
有趣的问题.我挖出了第一 JLS的版本,甚至还有它说:"这个修改是过时的,不应该在新的Java程序中使用".
好的,进一步挖掘 ......在击中无数断链后,我设法找到了原始的Oak 0.2 规范(或"手册")的副本.我必须说非常有趣的阅读,总共只有38页!:-)
在第5节"接口"下,它提供了以下示例:
public interface Storing {
void freezeDry(Stream s) = 0;
void reconstitute(Stream s) = 0;
}
Run Code Online (Sandbox Code Playgroud)
它在边缘说
将来,在接口中声明方法的"= 0"部分可能会消失.
假设=0被abstract关键字取代,我怀疑abstract在某些时候接口方法是强制性的!
相关文章:Java:抽象接口和抽象接口方法
Luk*_*der 37
它不是必需的,它是可选的,就像public接口方法一样.
请参阅JLS:
http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html
9.1.1.1抽象接口每个接口都是隐式抽象的.此修饰符已过时,不应在新程序中使用.
和
9.4抽象方法声明
[...]
为了与旧版本的Java平台兼容,允许但不鼓励,但作为一种风格,不要为接口中声明的方法冗余地指定抽象修饰符.
作为一种风格问题,允许冗余地指定接口方法的公共修饰符.
Thi*_*ilo 11
没有必要声明接口抽象.
就像声明所有那些方法public(它们已经是接口是公共的)或抽象(它们已经在接口中)是多余的.
但是没有人阻止你.
您可以明确说明的其他事项,但不需要:
extends Object是否有适用于抽象接口的其他规则?
界面已经是"抽象的".再次应用该关键字绝对没有区别.
小智 7
请注意,在Spring中它具有非学术意义.抽象接口是对开发人员不使用它的警告@Autowired.我希望spring/eclipse @Autowired会查看这个属性并警告/失败这些用法.
一个真实的例子:@Transnational下的@Service代理需要使用相同的基本方法,但是它们应该使用扩展这个抽象接口的不同接口@Autowired.(我称之为XXXSpec界面)