爲什麼我們使用private關鍵字?我知道它限制了對var或方法的訪問,但爲什麼我們必須限制訪問?爲什麼我們不得不使用私人?在C + +和Java?
回答
如果你公開所有的方法和變量,當另一個程序員試圖用你編寫的類來做某件事時,它會非常困難,因爲他不知道哪些方法會照顧到你的類的內部行爲,是他不應該使用的方法,因爲他會弄亂對象的內部狀態並導致錯誤。
感謝這就是我一直在尋找。:) – robotmaker01 2012-08-08 02:55:14
你不必「做任何事情」。僅暴露絕對必須暴露的東西是一種很好的做法,特別是當您創建一個大型程序,其連接數呈指數級增長時,副作用的風險隨之增加。這完全是關於管理複雜性。閱讀關於封裝和信息隱藏的內容,以及它如何幫助降低大型系統的複雜性。一本好書是Grady Booch的面向對象設計。
在面向對象的世界中實現封裝,理解你想要公開的對象的功能或行爲以及每個訪問標識符在其中扮演重要角色是非常重要的。在代碼完整書中,麥康奈爾強烈鼓勵將所有變量設爲私有。
考慮你正在構建一個實用程序庫,並且你將把方法作爲實用程序公開給外部世界。但是這些方法可能只有很少的私有方法。所以直接調用這些私有方法可能沒有任何意義,在最壞的情況下,它們甚至可能會損害對象的狀態。有很多例子可以解釋甚至在jdk中使用private。 在String
類中,有一個私有方法checkBounds
剛剛檢查有效的構造函數的參數在public String(byte bytes[], int offset, int length, String charsetName)
揭露這種方法(使它公衆)的情況下是沒有意義的String類。
私人顧名思義它是從外部類私人/不可訪問的東西。面向對象的編程語言有一個重要的概念,稱爲封裝這意味着限制訪問某些對象的組件。在開發代碼時,您需要隱藏其他類中的某些對象,在這種情況下,請將這些對象/變量作爲私有對象來刪除。私人訪問僅限於定義的類。
- 1. 爲什麼人們在C++中使用`main()`而不是`int main()`?
- 2. 什麼是私人FrameWorks,我們將如何使用它們?
- 3. 爲什麼我們不能在C#
- 4. 爲什麼我們使私有字段而不是本地包
- 5. Java:當不使用`私人`
- 6. 爲什麼我們不能在Java中使用指針?
- 7. 爲什麼我們不應該在Java中使用
- 8. 爲什麼人們說「因數法不好用!」在java中?
- 9. Java,爲什麼我們不能使用null作爲包名?
- 10. 爲什麼我們分別使用公共和私有變量
- 11. 爲什麼我們不能使用C字符串作爲SEL?
- 12. 什麼是不動產?爲什麼我不能讓自己的私人空間?
- 13. 我遇到過一些C++代碼。爲什麼我們不得不在塊中使用*而不是這個?
- 14. 爲什麼我們不能重寫`||`和`&&`?
- 15. 爲什麼人們使用textmate?
- 16. 爲什麼我可以在私人類型上使用自動?
- 17. 爲什麼我們需要一個私人構造函數?
- 18. 爲什麼演員操作員不能使用私人基座?
- 19. Objective-C:什麼是私人不是什麼?
- 20. 爲什麼我們在Java中使用堆棧和隊列?
- 21. 爲什麼我不能有一個私人的抽象方法?
- 22. 爲什麼人們不能在全球初始化我?
- 23. 爲什麼SQLBRITE和我們爲什麼使用它而不是SQLite?
- 24. 爲什麼人們在大多數java庫中使用org.proj.subproj
- 25. 爲什麼我們使用ChangeAwareList和ChangeAwareMap
- 26. 爲什麼要用最後的修改,當我們在方法類有私人
- 27. 爲什麼我們不應該同時使用jspViewResolver和TilesViewResolver?
- 28. 爲什麼我們不能一起使用SetEntitySetPageSize和MaxResultsPerCollection?
- 29. 爲什麼我們可以說`arr.inject(:+)`,但不得不說`arr.map(&:to_s)`?
- 30. 爲什麼人們使用i = i + 1而不是i ++?
閱讀關於封裝及其好處。 – Joset 2012-08-08 02:52:36
根據您想要提供給程序其他部分的信息來考慮它。讓我把它與一個例子聯繫起來,那就是國防部隊的安全許可。您只想將信息提供給具有所需安全許可的人員。除非他理應知道,否則你不想讓每個人都知道所有的信息。與程序一樣..你有很多帶變量和方法的類。私人告訴說,這個信息應該只提供給這個班級,因爲沒有其他班級需要這個信息。 – user1420750 2012-08-08 02:53:57