首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java抽象接口

Java抽象接口
EN

Stack Overflow用户
提问于 2011-08-26 09:23:38
回答 9查看 124.3K关注 0票数 214

考虑一个示例(它用java编译)

代码语言:javascript
复制
public abstract interface Interface {
    public void interfacing();
    public abstract boolean interfacing(boolean really);
}

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

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-08-26 09:26:58

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

事实并非如此。

代码语言:javascript
复制
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节“接口”中,它提供了以下示例:

代码语言:javascript
复制
public interface Storing {
    void freezeDry(Stream s) = 0;
    void reconstitute(Stream s) = 0;
}

在空白处写着

将来,接口中声明方法的“=0”部分可能会消失。

假设=0abstract关键字所取代,我怀疑abstract在某种程度上对接口方法是强制性的!

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

票数 471
EN

Stack Overflow用户

发布于 2011-08-26 09:25:26

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

关于这一点,请参阅JLS:

edition/html/interfaces.doc.html

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

9.4抽象方法声明 ..。 为了与Java平台的旧版本兼容,允许但不鼓励,就风格而言,冗余地为接口中声明的方法指定抽象修饰符。 允许为接口方法指定公共修饰符,但作为一种风格,这是非常不可取的。

票数 38
EN

Stack Overflow用户

发布于 2011-08-26 09:25:45

没有必要声明接口抽象。

就像声明所有这些方法是公共的(如果接口是公共的)或抽象(它们已经在接口中)是多余的一样。

不过没人能阻止你。

其他您可以显式声明的事情,但不需要:

  • 在构造函数的第一行上调用super()
  • extends Object
  • 实现继承的接口

还有其他适用于抽象接口的规则吗?

接口已经是“抽象的”了。再次使用这个关键字没有任何区别。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7202616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档