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 的输出为: