[英]Why does an interface hosting main in Java 8 not have to be public?
为什么以下代码可以在Java 8 + eclipse中编译并成功运行?
package package1;
interface A
{
static void main(String[] args) {
System.out.println("Hi");
}
}
如果将A更改为类,则运行时要求它是公共类,但对于接口则不是。 这似乎不一致。
编辑:我在发布问题时做出的上述陈述是WRONG 。 (我一定很累并且误读了错误)。 Java不需要类宿主main是公共的,只要求方法是公共的。 但是,类型托管主体不一定必须是公共的,而main方法却必须是公共的,这有点不一致。
如果将A更改为类,则运行时要求它成为公共类。
不,不是。 它要求方法是公共的,并且接口中的方法已经是公共的。
但对于接口而言并非如此。
不是这样
这似乎不一致。
不是。 您误读了错误消息。
在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();
}
接口及其字段和方法始终是公共的。
如果A是包含main方法的类,则A必须是公共的。 这是因为主要方法总是
public static void main(String[] args)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.