一尘不染

Java抽象接口

java

考虑一个示例(在Java中编译)

public abstract interface Interface {
    public void interfacing();
    public abstract boolean interfacing(boolean really);
}

为什么必须将接口“声明”为抽象的?还有其他适用于抽象接口的规则吗?

最后:如果abstract过时了,为什么将它包含在Java中?有抽象接口的历史吗?


阅读 258

收藏
2020-03-21

共1个答案

一尘不染

为什么必须将接口“声明”为抽象的?

不是。

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”部分可能会消失。

假设=0abstract关键字替换,我怀疑abstract接口方法在某些时候是必需的!

2020-03-21