1. 程式人生 > >[05] 利用private來封裝

[05] 利用private來封裝

調用方法 必須 屬性和方法 src 隱藏 發的 屬性 if語句 可能


我們知道,面向對象開發的三大特點是:封裝性、繼承性、多態性
所謂封裝性,實際上是表達了一種信息隱藏從表面上來闡述,就是使用private修飾符來對屬性或者方法進行信息隱藏,而使用public的方法控制訪問
例如,屬性使用private,方法使用public,則:
  1. public class Person {
  2. private String name;
  3. public String getName() {
  4. return name;
  5. }
  6. public void setName(String name) {
  7. this.name = name;
  8. }
  9. }

那麽如上,這樣一來,你想獲取一個Person對象的name屬性的話,你就不能使用類似於 zhangsan.name 的方式,而必須使用 zhangsan.getName()

這樣是為了更好的進行數據隱藏,要知道,在程序開發的過程中是靠多人協作完成的,也就是說程序員A可能會用到程序員B寫的某個方法,如果程序員B的所有屬性和方法都是暴露的,那麽程序員A在使用時完全可能會因為不熟悉(因為畢竟不是他自己寫的)而錯誤調用方法,或者更改了屬性,最終就會出現bug。所以使用封裝,我只暴露出來別人需要用到的方法,其他的他們無法訪問,那麽就大大降低了誤用的風險。
另外,數據的封裝,如最常見的各類屬性用private限制,而使用public開放的getter和setter來操作,因為很多時候並沒有設定特殊的動作,讓人感到多此一舉,實際不然。
getter和setter真正的好處在於,萬一某天你發現這個變量需要限制,那麽你只需要更改getter和setter中的代碼,而其他已經通過getter和setter來調用屬性的地方不用重復地去修改。
想象一下你所有的屬性都是public,其他的地方直接調用,當有一天你需要限制變量,如某屬性不能為負數了,怎麽辦?每個調用的地方修改一下,去使用if語句判斷是否大於0,那假如我調用了1000個地方呢?10000個地方呢?技術分享

最後,對於封裝的說明,這位網友的博客進行了更詳細的說明,推薦一波:java提高篇(一)-----理解java的三大特性之封裝

[05] 利用private來封裝