考虑一个示例(它用java编译)
public abstract interface Interface {
public void interfacing();
public abstract boolean interfacing(boolean really);
}为什么接口必须“声明”抽象?还有其他适用于抽象接口的规则吗?
最后:如果abstract过时了,为什么它包含在Java中?有抽象接口的历史吗?
发布于 2011-08-26 09:26:58
为什么接口必须“声明”抽象?
事实并非如此。
public abstract interface Interface {
\___.__/
|
'----> Neither this...
public void interfacing();
public abstract boolean interfacing(boolean really);
\___.__/
|
'----> nor this, are necessary.
}接口及其方法是隐式的abstract,添加修饰符也没有什么区别。
还有其他适用于抽象接口的规则吗?
不,同样的规则也适用。该方法必须由任何(具体)实现类实现。
如果抽象已经过时,为什么它会包含在Java中呢?有抽象接口的历史吗?
有趣的问题。我挖出了JLS的第一版,甚至在那里也写着http://web.archive.org/web/20091123225637/http://java.sun.com/docs/books/jls/first_edition/html/9.doc.html#30820。
好吧,进一步挖掘.在点击了许多坏链接后,我找到了原始橡木0.2 规格说明 (或“手册”)的副本。我必须说,读起来很有趣,总共只有38页!:-)
在第5节“接口”中,它提供了以下示例:
public interface Storing {
void freezeDry(Stream s) = 0;
void reconstitute(Stream s) = 0;
}在空白处写着
将来,接口中声明方法的“=0”部分可能会消失。
假设=0被abstract关键字所取代,我怀疑abstract在某种程度上对接口方法是强制性的!
相关文章:Java:抽象接口和抽象接口方法
发布于 2011-08-26 09:25:26
它不是必要的,它是可选的,就像接口方法上的public一样。
关于这一点,请参阅JLS:
edition/html/interfaces.doc.html
9.1.1.1抽象接口每个接口都是隐式抽象的。此修饰符已过时,不应在新程序中使用。
和
9.4抽象方法声明 ..。 为了与Java平台的旧版本兼容,允许但不鼓励,就风格而言,冗余地为接口中声明的方法指定抽象修饰符。 允许为接口方法指定公共修饰符,但作为一种风格,这是非常不可取的。
发布于 2011-08-26 09:25:45
没有必要声明接口抽象。
就像声明所有这些方法是公共的(如果接口是公共的)或抽象(它们已经在接口中)是多余的一样。
不过没人能阻止你。
其他您可以显式声明的事情,但不需要:
extends Object还有其他适用于抽象接口的规则吗?
接口已经是“抽象的”了。再次使用这个关键字没有任何区别。
https://stackoverflow.com/questions/7202616
复制相似问题