为什么在Java 8中托管main的接口不必公开?

时间:2018-01-08 21:54:16

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

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

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

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

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

3 个答案:

答案 0 :(得分:5)

  

如果A更改为类,则运行时需要将其作为公共类。

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

  

但接口不是这样。

不是这样。

  

这似乎不一致。

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

答案 1 :(得分:0)

在java之前的1.8静态方法是不允许的。

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

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

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

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

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

答案 2 :(得分:-1)

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

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

public static void main(String[] args)