我正在嘗試使用不同訪問修飾符的類的包進行項目,以查看具有不同訪問修飾符的類的所有特性。我嘗試了一個包含公共類的包,其中一個包含一個默認類,然後嘗試另外兩個包含受保護和私有類,但它表示「類privatez的非法修飾符;只允許public,摘要& final」。這是爲什麼。其次,測試每個班級的東西是理解它的好方法。我試圖給出比以前的帖子更好的問題。我也想學習每個訪問修飾符的應用。練習訪問修飾符
練習訪問修飾符
回答
我想有一個包,一個公共類,一個帶有默認類,然後設法讓其他受保護和私有類2,但它說:「作爲類privatez非法修改;只有公開,抽象&決賽被允許「爲他們。這是爲什麼。
簡單的答案是,JLS說你不能聲明頂級類爲private
。
原因是,只有一個只有自己可見的類是沒有意義的。沒有任何其他課程能夠使用它(除了假設,使用反射技巧)。所以JLS只是說:「沒有道理,我不允許。」
(現在嵌套類可以訪問private
...那是因爲private
意味着private
在最外層的類所有類...)
其次,是測試每個班級的東西都是理解它的好方法。
我認爲最好是閱讀並嘗試理解課本/教程。問題是,如果你試圖通過自己的例子來學習,你很容易從中得出錯誤的結論。
對於這個例子:
package privatez; protected class privatez { }
一個假設protected
類會/可能僅是它的子類可見。但類別總是對其子類可見,所以這沒有任何意義。 (另外,爲了防止子類的方法是聲明一個類final
,你可以使用「包私人」限制的子類,即沒有訪問修飾符)
的protected
訪問修飾符只讓任何意義的東西內一類。在頂級課程中,protected
的正常含義沒有任何意義。 (這是試圖通過例子學習的問題之一,你最終難以理解爲什麼編譯器會拒絕這些例子,不要指望編譯器「解釋」出錯的原因,這不是它的角色)
,但是受保護的類可以在同一個包之外的子類中可見,所以不會讓它值得受保護 –
我需要查看您編寫/編譯的確切代碼以回答該問題。和確切的編譯錯誤消息。 –
+1如果存在受保護的類概念,那麼該類對於相同包中的子類將是可見的,並且在沒有定義任何修飾符的情況下就是這種情況。 – havexz
如果你想學習,你應該閱讀一些關於java的書。在這裏,我只能給你一個小要點:
類訪問修飾符:
公共
類可以包裝它的一部分外部訪問。
默認
這是當你不指定任何東西。這個類可以在包中使用,它是其中的一部分。
只是爲了澄清:
private
改性劑是沒有意義的。由於沒有人可以訪問私有類,所以不能用於擴展或實例創建。
說一下,如果有一個protected
類的概念,那麼這個類對於同一個包中的子類是可見的,如果你沒有定義任何修飾符的話,這個類是可見的。
其他類屬性(這些都沒有訪問改性劑):
抽象
如果定義,該類的用戶不能創建它的實例。而擴展它的類必須實現抽象方法或將其定義爲抽象。
最終
如果定義,用戶不能擴展此類。
[做法訪問修飾符]的- 1. Delphi訪問修飾符
- 2. 內部訪問修飾符
- 3. 庫級訪問修飾符
- 4. EventInfo訪問修飾符
- 5. 動態訪問修飾符
- 6. 類訪問修飾符
- 7. 保護訪問修飾符
- 8. 通過訪問修飾符
- 9. 包訪問(protected修飾符)
- 10. Java訪問修飾符:無修飾符與「默認」
- 11. 訪問修飾符C# - 內部修飾符
- 12. 訪問修飾符VS屬性
- 13. Java訪問修飾符優先
- 14. 成員類訪問修飾符
- 15. C++子類訪問修飾符?
- 16. 訪問Javascript中的修飾符
- 17. 訪問修飾符的內部類
- 18. 在java中訪問'final'修飾符類
- 19. 什麼是訪問修飾符
- 20. 名稱空間的訪問修飾符
- 21. 類和訪問修飾符在.NET
- 22. C#訪問修飾符與傳承
- 23. 函數的SQL Server訪問修飾符
- 24. 缺少「框架級」訪問修飾符
- 25. python - 嵌套類訪問修飾符
- 26. 訪問修飾符的正確應用
- 27. 關於java最終訪問修飾符
- 28. 爪哇 - 保護的訪問修飾符
- 29. 自動重構訪問修飾符
- 30. 瞭解默認訪問修飾符
可能重複(http://stackoverflow.com/questions/11165566/practice-access-modifiers) –
@AnthonyPegram我把它做成一個更好的問題,實際上解釋了我想知道。這不是重複。 –