我知道子類除了擁有超級類的公共setter/getter之外,不能訪問私有領域。至今我還沒有任何面嚮對象語言的經驗。我是否應該將所有字段設置爲私有的,並且只需使用公共方法在子類中訪問它們,或者讓它們受到保護並在子類和包中自由使用?Java對私有領域的影響
回答
使它們成爲protected
。這是此關鍵字存在的唯一目的!
不是。這取決於OP是否在意泄漏內部狀態。 – 2015-03-31 20:33:00
子類不繼承其父類的私有成員。但是,如果超類具有訪問其專用字段的公共或受保護方法,那麼這些也可以由子類使用。
嵌套類可以訪問其包含的所有私有成員 類 - 這兩個字段和方法。因此,由子類繼承的公共或受保護的嵌套類可間接訪問超類的所有私有成員。
@chancea看看他談論繼承的標題 – 2015-03-31 20:26:00
這不是一個答案。 OP正在問一個設計問題,而不是圍繞範圍的規則。 – 2015-03-31 20:33:53
在OOP
還有一個特點encapsulation
和encapsulation
強烈建議我們隱藏從外部世界中的數據。而且你可以通過將字段/屬性/變量隱藏來隱藏數據。
並且對於訪問私有變量使用一些公開的getter
方法。
這取決於您的需求。如果您需要訪問子類以及相同的包,請將其設爲protected
。
下面是一般規則:
private
:只有一流的訪問。
protected
:包訪問和派生類。
default
:僅限於相同的包裝。
public
:任何人都可以訪問它。
- 1. java有什麼私人領域?
- 2. Grails中的領域建模如何受領域屬性影響?
- 3. 私有方法和領域
- 4. 訪問Java中的私人領域
- 5. 唯一性約束不影響領域
- 6. 太多的ORM POJO領域模型類對Java PermGen空間有什麼影響?有沒有可用的指標?
- 7. Junit的私人領域
- 8. INotifyPropertyChanged的帶私人領域
- 9. 私人領域不編譯
- 10. 模式與私人領域
- 11. 私人領域是超
- 12. 嘲笑私人領域
- 13. 如何在共享領域創建私有Realm對象
- 14. 投影領域另一場
- 15. 班級和領域的知名度之間的相互影響
- 16. Java領域
- 17. CCLiquid對CCSprite特定區域的影響?
- 18. 如何通過不變的數據影響領域同步?
- 19. 對象可變性對Python的作用域有什麼影響?
- 20. 私人領域的垃圾收集
- 21. 私人財產領域的StackOverflow例外
- 22. 摘要Scala的特質私人領域
- 23. Junit的:與私人領域@Autowired
- 24. 私人領域的公共方法
- 25. RequiredAttribute標籤上的私人領域
- 26. Python的私人領域與getter方法
- 27. Collections.sort具有多領域的Java
- 28. Javascript:如何保存對象與私人領域的文件?
- 29. 投影創建新的領域
- 30. SpriteBatch.setBlendFunction()對Android沒有影響
getter/setter訪問在Java中更傳統。使對象儘可能少變化也是非常好的做法。經過一年的經驗,你會明白爲什麼。 – 2015-03-31 20:29:01
好吧,讓所有的東西都是私人的,甚至在自己的孩子分類器中使用setter getters是一種社會上可以接受的方式? – KrwawyKefir 2015-03-31 20:56:24
如果您製作實用的軟件包,當然不需要這麼做,但要確保所有這些字段都隱藏在包裝以外的直接訪問中。 「到處吸收/設置者」更多地是關於JPA,EJB和其他企業內容。 – 2015-03-31 21:05:33