[英]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.