【问题标题】:Java - encapsulation purpose in some cases [duplicate]Java - 在某些情况下的封装目的[重复]
【发布时间】: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


【解决方案1】:

每个人都说我们需要将类中的每个变量设为私有

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

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

创建字段private 的作用是什么。

【讨论】:

  • 为什么要回答这个问题,而不是将其作为明显的重复问题关闭?
  • @jaco0646 因为它不是(IMO)明显重复。
猜你喜欢
  • 1970-01-01
  • 2020-06-20
  • 2016-01-27
  • 2019-03-23
  • 1970-01-01
  • 2023-03-25
  • 2019-04-21
  • 1970-01-01
相关资源
最近更新 更多