【发布时间】:2015-10-18 01:27:31
【问题描述】:
每个人都说我们需要将类中的每个变量设为私有,并使用 getter/setter 访问它们。我试图理解为什么我们总是需要这样做?例如,如果我制作一个简单的游戏并创建一个 Object 类,它存储任何对象和其他对象(例如精灵)的 x 和 y 坐标,这样做不是更好吗:
public class Object
{
public float x, y;
public Object(float x, float y)
{
this.x = x;
this.y = y;
}
}
public class Sprite extends Object
{
public Sprite(float x, float y, /* other stuff, e.g. img src */)
{
//...
}
}
并像这样使用它:
sprite1 = new Sprite(/* ... */);
checkSomething(sprite1.x, sprite1.y);
不是更自然更快捷吗?就像我们需要在一帧中比较对象坐标数千次?我们不需要验证坐标——每个浮点数都可以。那么为什么要用 getX() 和 setX(/* ... */) 之类的函数来做同样的事情呢?
【问题讨论】:
-
如果您的示例中对象的位置是
final(一旦设置就不再更改),那么将其提供为public是合理的。例如,这与array.length相同。直接更改状态可能会在较大的代码中产生意想不到的后果。
标签: java oop encapsulation