为什么以下代码在Java 8 + eclipse中成功编译并运行?
package package1;
interface A
{
static void main(String[] args) {
System.out.println("Hi");
}
}
如果将A更改为类,则运行时需要将其作为公共类,但对于接口则不然。这似乎不一致。
编辑:我在发布问题时所做的上述评论是错误。 (我一定很累,误读了错误)。 Java不要求托管main的类是公共的,只需要方法。 但是,类型托管main不必是公共的,而主要的方法是公开的,这有点不一致。
答案 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)