Java 抽象接口

2022-08-31 06:02:22

考虑一个例子(用java编译)

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

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


最后:如果已过时,为什么它被包含在Java中?抽象界面有历史吗?abstract


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

假设被关键字替换,我怀疑这在某些时候对于接口方法来说是强制性的!=0abstractabstract


相关文章:Java:抽象接口和抽象接口方法


答案 2

它不是必需的,它是可选的,就像在接口方法上一样。public

请参阅JLS:

http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html

9.1.1.1 抽象 接口 每个接口都是隐式抽象的。此修饰符已过时,不应在新程序中使用。

9.4 抽象方法声明

[...]

为了与旧版本的 Java 平台兼容,允许但不鼓励为接口中声明的方法冗余指定抽象修饰符,但出于风格考虑,这是不鼓励的。

允许(但强烈建议不要作为样式问题)为接口方法冗余指定公共修饰符。