Java - 在某些情况下封装的目的

时间:2015-10-18 01:27:31

标签: java oop encapsulation

每个人都说我们需要将类中的每个变量设为私有,并使用getter / setter访问它们。我试图理解为什么我们总是需要这样做?例如,如果我制作一个简单的游戏并创建一个Object类,它存储任何对象和其他对象(例如sprite)的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(/ * ... * /)这样的函数做同样的事情会使它复杂化呢?

1 个答案:

答案 0 :(得分:2)

  

每个人都说我们需要在私有的

中创建每个变量

由于xy Point中的公共字段,我相信你断言字段必须是私有的是有缺陷的。但是,通常建议使用它。主要是因为encapsulation是一个重要的设计原则。链接的维基百科文章(部分)

  

用于限制对某些对象组件的访问的语言机制

创建字段private的原因是什么。