考虑一个示例(在Java中编译)
public abstract interface Interface { public void interfacing(); public abstract boolean interfacing(boolean really); }
为什么必须将接口“声明”为抽象的?还有其他适用于抽象接口的规则吗?
最后:如果abstract过时了,为什么将它包含在Java中?有抽象接口的历史吗?
abstract
为什么必须将接口“声明”为抽象的?
不是。
public abstract interface Interface { \___.__/ | '----> Neither this... public void interfacing(); public abstract boolean interfacing(boolean really); \___.__/ | '----> nor this, are necessary. }
接口及其方法是隐式的abstract,添加该修饰符没有区别。
还有其他适用于抽象接口的规则吗?
不,适用相同的规则。该方法必须由任何(具体)实现类来实现。
如果抽象已经过时,为什么它包含在Java中?有抽象接口的历史吗?
有趣的问题。我挖出了第一 JLS的版本,甚至还有它说:“这个修改是过时的,不应该在新的Java程序中使用”。
好的,进一步挖掘 …碰到许多断开的链接后,我设法找到了原始的Oak 0.2 规范(或“手册”)的副本。我必须说非常有趣的阅读,总共只有38页!:-)
在第5节“接口”下,它提供以下示例:
public interface Storing { void freezeDry(Stream s) = 0; void reconstitute(Stream s) = 0; }
边上说
将来,接口中声明方法的“ = 0”部分可能会消失。
假设=0被abstract关键字替换,我怀疑abstract接口方法在某些时候是必需的!
=0