存取方法(Access method) | page 12 of 37 |
爲了讓實例變量的值能夠在需要的時候改變,我們應該提供一個方法來改變其值; 這種方法被特別地稱爲 存取方法(access method)。依照慣例,只是簡單的用來改變實例變量值的方法名稱應該以 "set" 開頭:
上例中的方法很有意思,它對兩個不同的變量用了同一個名字 barkSound。首先,作爲參數定義的barkSound 是一個新的叫聲(barking sound)。在此方法中所有對 barkSound 的沒有限定的引用都指的是這個作爲參數傳入的數據。但是,我們還有一個爲每個被初始化的狗(dog)提供的實例變量 barkSound。在Java(TM) 中,我們可以用特別的 "實例句柄(instance handle)" this 來指定 Dog 的當前實例。因此,
語句將實例變量 (this.barkSound 的當前值改變成 setBark() 的參數 (barkSound)傳入的新值。
爲了更明白地說明 this 變量,假訂我們爲 Dog 創建了一個實例叫 fido,然後執行 fido的方法 setBark()
在setBark() 中的this 就是指 fido,更確切地說,this.barkSound 指的就是對象 fido 的 barkSound 實例變量。
在 DogChorus 的下面版本中,創建了一個對象 fido,將它的 barking 特徵從默認的 "Woof." 改變爲 "Ruff.",然後調用 barking 行爲:
經過這種修改,象 fido 這樣的對象,其特徵就可以由實例(狀態)變量的當前值和 Dog 中方法所定義的行爲一起來反映。