2011-02-07 217 views

回答

4

查找「封裝」和「信息隱藏」。

基本上,一個類管理數據並提供對它們的操作/提供對它們的訪問,但數據的內部表示應該保持對類的私有表示。像這樣,一個類可以改變其內部表示而不會破壞其他代碼。

E.g.考慮:

A) 

    public Date date; 

B) 

    private Date date; 


    public Date getDate(){...} 
    public setDate(Date date){...} 

後來您選擇使用日曆而不是日期。在情況A)你不​​能改變數據類型而不破壞代碼。

在情況B),你可以這樣做:

private Calendar calendar; 


    public Date getDate(){...} 
    public setDate(Date date){...} 
    public Calendar getCalendar(){...} 
    public setCalendar(Calendar calendar){...} 

可以提供在get /的setDate方法轉換。客戶端代碼不會中斷。

有時你想使用getter和setter的另一個原因是使用庫/

框架,其底座上的JavaBeans模式。

0
  • 只提供getter/setter方法,如果確實需要它,不只是自動
  • 一個的getter/setter隱藏了內部實現和理論上給你一個定義良好的接口,並允許您更改做內部實現,客戶無需更改其代碼
0

如果將變量保留爲public,則無法確保該對象保持一致狀態。在你的製片人中,你可以例如進行一些檢查,例如,避免將負數設置爲年齡。

如果你有公共變量,例如可能有監聽器,因爲監聽器通常使用通過setter設置變量的通知。直接更改公共變量時,沒有機會跟蹤更改。

這些是一些非常基本的例子,但可以肯定地發現。

1

有很多原因。這是一種控制訪問(訪問者)到你的班級內部工作的方式。有時例如,您可能希望getter將對象或setter的克隆返回給私有對象上的值,而不是將該處理器指向傳遞給setter的新對象。另一個原因是在獲取或設置對象之前或之後執行某些操作而不公開此功能。

概括起來:

  1. 你給爲未來的擴展
  2. 你關上門不受控制的訪問

使用它們僅在需要時,雖然。