【问题标题】:Is it unnecessary to specify public or public abstract in the code below? [duplicate]是否不需要在下面的代码中指定 public 或 public abstract ? [复制]
【发布时间】:2021-02-07 17:03:22
【问题描述】:
interface Airplane {
     String fuelOption = "kerosene";
     
     public abstract String getFuelOption();
}

是否需要在getFuelOption()方法中指定public或者public abstract? 谢谢!

【问题讨论】:

  • 所有接口方法默认都是publicabstract
  • 没必要。
  • 我做到了...我只是想确定一下,我看到有些人无论如何都在使用关键词...抱歉,这是我的第一个问题...天哪。
  • 如果你这样做了,那么你会找到一个明确的答案,而不必费心发帖。提供答案的两个人在几分钟内就回答了,这对于本网站来说是非典型的。为什么?因为通过搜索非常容易找到答案。你不需要戴上遮羞布来挽回面子——你需要做的就是了解这个网站重视效率并继续学习这些知识。阅读how to ask 上的帮助文件部分。

标签: java interface abstract


【解决方案1】:

不,所有interface 方法默认为publicabstract

Java language spec 中的相关文本,第 9.4 节

接口主体中的方法可以声明为 public 或 private 。如果没有给出访问修饰符,则该方法是隐式的 公开。

缺少私有、默认或静态修饰符的接口方法是 隐含抽象。它的主体由分号表示,而不是 块。

【讨论】:

    【解决方案2】:

    不需要公共访问修饰符,因为

    接口主体中的每个方法声明都是隐式的 公开(第 6.6 节)。这是允许的,但作为一种风格不鼓励, 为方法声明冗余地指定 public 修饰符 一个界面。 (第 9.4 节)

    不需要抽象访问修饰符,因为

    默认方法是在接口中声明的方法 默认修饰符;它的主体总是由一个块表示。

    还有……

    缺少默认修饰符或静态修饰符的接口方法是隐式抽象的,因此其主体由分号表示,而不是块。

    鉴于默认方法有一个主体,而那些没有本质上是抽象的,并且接口上的每个方法声明本质上都是公共的,您不需要指定任何一个关键字。

    请参考下面的JLS:

    https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#:~:text=Every%20method%20declaration%20in%20the,method%20declaration%20in%20an%20interface.&text=Default%20methods%20are%20distinct%20from,which%20are%20declared%20in%20classes.

    【讨论】:

    • 赞成,但最好链接到您引用的 JLS 部分。
    • 感谢您的建议,用 JLS 更新了答案。
    • 谢谢!我记得读过这篇文章,但我想仔细检查一下,因为我看到的一些示例以任何方式包含了这些关键字。
    猜你喜欢
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多