簡體   English   中英

為什么Java 8中主要托管接口的接口不必公開?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM