boolean isGoodWithChildren() { return (gentle == true && obedienceTrained == true); } 還可以寫得更精簡一些。注重每一個子表達式都是一個布爾變量和布爾值 true 比較,在此例中,每個子表達式都可以簡寫為布爾變量本身: boolean isGoodWithChildren() { return (gentle && obedienceTrained); } 存取方法再論 Dog 中提供了形式為 setXX 的寫方法來改變實例變量的值。然而很多時侯,也需要獲得實例變量的值。一般說來,假如一個類具有支持 set 操作的實例變量,那么他們也一定支持 get 操作。對應每一個 set 方法,我們應該為之編寫一個相應的 get 方法,例如 boolean getObedienceTrained() { return obedienceTrained; } 注重:假如實例變量是 boolean 類型,如 obedienceTrained,很多程序員都習慣用形式 isXX 命名本該為 getXX 的方法,而有的程序員則會兩種方法都提供: boolean isObedienceTrained() { return obedienceTrained; } 循環執行 Java(TM) 提供了 while, do-while, 和 for 語言結構來循環多次執行一個語句(或語句組)。while 是一種更常用的循環結構;for 則語法功能更強大。 循環結構 while (<布爾表達式>) <語句組>... do <語句組>... while (<布爾表達式>) for (<初始條件>...; <布爾表達式>; <循環過程表達式>...) <語句>... 有了循環,我們就可以讓我們的狗叫個不停,令我們的鄰居很沮喪:
void bark(int times) { while (times > 0) { System.out.PRintln(barkSound); times = times - 1; } } 因此,用另一個 bark() 方法,我們可以支持面向對象的任務:向 Dog 的實例發送一個 bark 消息,該消息用方法定義中的 times 參數來反映消息請求 n 次叫聲(bark)。
DogChorus 現在真的名符其實了:
public class DogChorus { public static void main(String[] args) { Dog fido = new Dog(); Dog spot = new Dog(); spot.setBark("Arf. Arf."); fido.bark(); spot.bark(); fido.bark(4); spot.bark(3); new Dog().bark(4); // unknown dog System.exit(0); } } 現在 DogChorus 的輸出為: