我正在閱讀一些Java文本,文字說我們只能對類和接口應用public
或default
訪問修飾符。因此,它是一個編譯錯誤,如果我們聲明:爲什麼類或接口不能接收私有或受保護的訪問修飾符?
private class A {}
或
protected class A{}
我只是好奇,爲什麼一個類或接口無法接收private
或protected
訪問修飾符?
我正在閱讀一些Java文本,文字說我們只能對類和接口應用public
或default
訪問修飾符。因此,它是一個編譯錯誤,如果我們聲明:爲什麼類或接口不能接收私有或受保護的訪問修飾符?
private class A {}
或
protected class A{}
我只是好奇,爲什麼一個類或接口無法接收private
或protected
訪問修飾符?
private
表示「僅在封閉類中可見」。
protected
表示「僅在封閉類和任何子類中以及封閉類包中的任何位置可見」。
private
因此,應用於頂級類時沒有意義; protected
定義的第一部分也是如此。 protected
的第二部分可以應用,但它由默認(軟件包保護)修飾符覆蓋,因此protected
是部分無意義且部分冗餘的。
private
和protected
都可以(並經常)應用於嵌套類和接口,而不是頂級類和接口。
頂級的類可見性只有兩個用例(a)隨處可見(b)僅在包中可見。因此只有兩個修飾符(public
和默認值)。如果班級是public
,那麼它對所有班級都是可見的。如果沒有訪問修飾符,則僅對同一包中的類纔可見。
如果頂級的類可見性有更多的用例,Java語言會提供更多的修飾符。
首先,Java提供的可視性比Java提供的要多(例如參見c#),其次你可以使用受保護或私有修飾符的類 - 只是沒有頂級修飾符。 – Voo
@Voo,頂層只有兩個用例。我相信問題暗示,正如它所說的任何其他修飾符給編譯錯誤 –
類的可見性意味着什麼? –
頂級類只能有public
或default
訪問,但內部類可以有private access
:
public class TestClassAccess
{
public static void main(String[] args)
{
new TestClassAccess().new TestClassPrivateAccess();
}
private class TestClassPrivateAccess
{
TestClassPrivateAccess()
{
System.out.println("I'm a private class");
}
}
}
很好的例子。內部類也可以是靜態的。內部接口和枚舉是隱式靜態的。 – emory
這是不是如果我們聲明私有類A {}或保護B類{一個編譯錯誤}只要因爲A和B不是頂級類。 – emory
我相信接口的默認訪問是公共的,所以實際上接口總是公共的。 –
@Adriaan Koster No.該規則適用*內*接口,但不適用於接口本身。 – EJP