【问题标题】:Why does an interface hosting main in Java 8 not have to be public?为什么 Java 8 中托管 main 的接口不必公开?
【发布时间】:2018-06-17 22:08:54
【问题描述】:

为什么下面的代码在Java 8+eclipse中编译运行成功?

package package1;
interface A  
{
    static void main(String[] args) {
        System.out.println("Hi");
    }
}

如果将 A 更改为类,则运行时要求它是公共类,但对于接口则不然。这似乎不一致。

编辑:我在发布问题时所做的上述陈述是错误。 (我一定是累了,误读了错误)。 Java 不要求托管 main 的类是公共的,只要求方法。 但是,托管类型 main 不必是 public,而 main 方法必须是 public,这有点不一致。

【问题讨论】:

  • 所有接口成员默认为public
  • 该类不必是公开的。该方法可以。
  • 接口隐含publicstatic
  • 你的问题是类型还是方法?
  • 接口不是隐式公开的。他们的方法是。原来运行时不需要公开类型,只需要 main 方法。

标签: java interface java-8 main static-methods


【解决方案1】:

如果将 A 更改为类,则运行时要求它是公共类。

不,它没有。它要求 方法 是公共的,并且接口中的方法已经是公共的。

但对于界面而言并非如此。

不是这样。

这似乎不一致。

不是。您误读了错误消息。

【讨论】:

    【解决方案2】:

    接口及其字段和方法始终是公共的。

    如果 A 是包含 main 方法的类,则 A 必须是公共的。这是因为 main 方法总是

    public static void main(String[] args)
    

    【讨论】:

    • 包含类不必是公开的,最后一句是不合逻辑的。
    【解决方案3】:

    在 1.8 之前的 java 中不允许使用静态方法。

    默认情况下所有方法都是公共的,因此您不必显式使用关键字。

    interface myInterface {
    public void show();
    //same as above
     void show();
    }
    

    从java 8开始,接口也可以有static方法。

    因此,您可以使用 static 方法,但不需要 public 关键字

    interface myInterface {
    static void main(String[] args) {}
    void show();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 2011-11-19
      • 2016-09-09
      • 2014-06-20
      相关资源
      最近更新 更多