【问题标题】:since all interface method are public, does that mean all implementation of interface method must be public as well由于所有接口方法都是公共的,这是否意味着接口方法的所有实现也必须是公共的
【发布时间】:2016-04-10 09:09:41
【问题描述】:

既然所有接口方法都是公共的,那是否意味着所有接口方法的实现也必须是公共的?我读过子类只能分配 访问级别高于原始方法。我已经用一些代码尝试过这个,它似乎是真的,但我只是想知道我在哪里可以找到关于这个的文档?

【问题讨论】:

标签: java interface public


【解决方案1】:

您可以在Java Language Specification 中找到该要求的官方文档。

引用8.4.8.3. Requirements in Overriding and Hiding:

覆盖或隐藏方法的访问修饰符(第 6.6 节)必须提供至少与覆盖或隐藏方法一样多的访问权限,如下所示:

如果被覆盖或隐藏的方法是公共的,那么覆盖或隐藏的方法必须是公共的;否则,会发生编译时错误。

如果覆盖或隐藏的方法是受保护的,那么覆盖或隐藏的方法必须是受保护的或公开的;否则,会发生编译时错误。

如果被覆盖或隐藏的方法具有包访问权限,则覆盖或隐藏方法不能是私有的;否则,会发生编译时错误。

【讨论】:

    【解决方案2】:

    如 Oracle 官方 Java 教程中所述:

    接口是一种所有实现类都必须遵守的契约

    这意味着,方法的签名、返回类型和访问修饰符不允许更改。

    https://docs.oracle.com/javase/tutorial/java/IandI/index.html

    此外,如果您尝试使用 @Override 注释标记接口方法,编译器将抛出错误。

    【讨论】:

      【解决方案3】:

      Interfaces 被创建为一个接口,用于使用实现它们的类。

      例如,我们实现了一个Comparable 接口,以确保该类具有compareTo 方法,该方法可以被其他类使用

      所以这是不可能的,我认为这样做没有意义。

      我没有找到与您的问题完全相关的文档部分,但可以从这部分理解:

      如果被覆盖或隐藏的方法是公共的,那么覆盖或隐藏的方法必须是公共的;否则,会发生编译时错误。

      【讨论】:

        猜你喜欢
        • 2015-01-04
        • 2011-11-06
        • 1970-01-01
        • 2020-05-18
        • 1970-01-01
        • 2016-06-07
        • 1970-01-01
        • 2017-06-08
        • 2013-01-01
        相关资源
        最近更新 更多