10.5 可修改的对象
可通过给对象的属性赋值来修改对象的内容。例如,要移动矩形而不改变其尺寸,可修改属性 x 和 y:
Rectangle box = new Rectangle(0, 0, 100, 200);box.x = box.x + 50;box.y = box.y + 100;
结果如图 10-3 所示。

图 10-3:显示最新属性值的状态图
我们可将这些代码封装到一个方法中后再进行泛化,让这个方法能够将矩形移动任何指定的距离:
public static void moveRect(Rectangle box, int dx, int dy) {box.x = box.x + dx;box.y = box.y + dy;}
变量 dx 和 dy 用于指定将矩形沿水平和垂直方向分别移多远。调用这个方法将修改作为实参传入的 Rectangle 对象。
Rectangle box = new Rectangle(0, 0, 100, 200);moveRect(box, 50, 100);System.out.println(box);
将对象作为实参传递给方法以便修改十分有用,但也可能导致调试更加困难,因为并非在任何情况下都能清楚地知道哪些方法会修改其实参。
Java 提供了很多操作 Point 和 Rectangle 对象的方法,例如,translate 的效果与 moveRect 相同,但调用这个方法时,不是将 Rectangle 对象作为实参传递给它,而是用句点表示法:
box.translate(50, 100);
这行代码对 box 指向的对象调用方法 translate,因此将直接更新对象 box。
这个示例很好地演示了面向对象(object-oriented)编程:不是编写 moveRect 这样修改一个或多个实参的方法,而是用句点表示法对对象调用方法。
