2012-06-23 186 views
2

我正在嘗試使用不同訪問修飾符的類的包進行項目,以查看具有不同訪問修飾符的類的所有特性。我嘗試了一個包含公共類的包,其中一個包含一個默認類,然後嘗試另外兩個包含受保護和私有類,但它表示「類privatez的非法修飾符;只允許public,摘要& final」。這是爲什麼。其次,測試每個班級的東西是理解它的好方法。我試圖給出比以前的帖子更好的問題。我也想學習每個訪問修飾符的應用。練習訪問修飾符

+0

可能重複(http://stackoverflow.com/questions/11165566/practice-access-modifiers) –

+1

@AnthonyPegram我把它做成一個更好的問題,實際上解釋了我想知道。這不是重複。 –

回答

5

我想有一個包,一個公共類,一個帶有默認類,然後設法讓其他受保護和私有類2,但它說:「作爲類privatez非法修改;只有公開,抽象&決賽被允許「爲他們。這是爲什麼。

簡單的答案是,JLS說你不能聲明頂級類爲private

原因是,只有一個只有自己可見的類是沒有意義的。沒有任何其他課程能夠使用它(除了假設,使用反射技巧)。所以JLS只是說:「沒有道理,我不允許。」

(現在嵌套可以訪問private ...那是因爲private意味着private在最外層的類所有類...)

其次,是測試每個班級的東西都是理解它的好方法。

我認爲最好是閱讀並嘗試理解課本/教程。問題是,如果你試圖通過自己的例子來學習,你很容易從中得出錯誤的結論。


對於這個例子:

package privatez; protected class privatez { } 

一個假設protected類會/可能僅是它的子類可見。但類別總是對其子類可見,所以這沒有任何意義。 (另外,爲了防止子類的方法是聲明一個類final,你可以使用「包私人」限制的子類,即沒有訪問修飾符)

protected訪問修飾符只讓任何意義的東西一類。在頂級課程中,protected的正常含義沒有任何意義。 (這是試圖通過例子學習的問題之一,你最終難以理解爲什麼編譯器會拒絕這些例子,不要指望編譯器「解釋」出錯的原因,這不是它的角色)

+1

,但是受保護的類可以在同一個包之外的子類中可見,所以不會讓它值得受保護 –

+0

我需要查看您編寫/編譯的確切代碼以回答該問題。和確切的編譯錯誤消息。 –

+0

+1如果存在受保護的類概念,那麼該類對於相同包中的子類將是可見的,並且在沒有定義任何修飾符的情況下就是這種情況。 – havexz

3

如果你想學習,你應該閱讀一些關於java的書。在這裏,我只能給你一個小要點:

類訪問修飾符:

公共

類可以包裝它的一部分外部訪問。

默認

這是當你不指定任何東西。這個類可以在包中使用,它是其中的一部分。

只是爲了澄清:

private改性劑是沒有意義的。由於沒有人可以訪問私有類,所以不能用於擴展或實例創建。

說一下,如果有一個protected類的概念,那麼這個類對於同一個包中的子類是可見的,如果你沒有定義任何修飾符的話,這個類是可見的。

其他類屬性(這些都沒有訪問改性劑):

抽象

如果定義,該類的用戶不能創建它的實例。而擴展它的類必須實現抽象方法或將其定義爲抽象。

最終

如果定義,用戶不能擴展此類。

For more details about java as language read

[做法訪問修飾符]的