私有变量与相应的setter方法的目的是什么?

Raj*_*mar 5 java oop

当我们在java中有一个私有变量的setter方法时,将变量设为私有的目的是什么?

我们有私有变量来限制用户不直接访问实例的状态.但有时,我们有相应的setter和getter方法来访问和更改私有变量的状态.如果是这样,那么我们为什么要将变量设为私有?我们可以只使用公共变量吗?

Bri*_*new 13

理由是您隐藏了实现.你打电话的时候

setX(23);
Run Code Online (Sandbox Code Playgroud)

您的相应变量x对客户端类隐藏,无法直接观察或修改.

为什么这样好?

  1. 它隐藏了实施.您可以x在以后更改为(例如)a string,a double等,并且您的客户端代码不必更改.x甚至可能会消失,调用setX()实际上会执行一些不同但相当的功能.
  2. 通过实现setter函数,您可以强制执行验证等.否则,您无法阻止某人设置x为无效(例如负值)值.
  3. (这是特定于Java的好处,而不是一般的OO好处).许多Java框架使用JavaBeans约定来处理对象.即对于一个属性x,将存在一个对应的getX()/ setX()(或isX()如果它是a boolean).通过遵守惯例,您的类将与这些框架很好地互操作.

注意,有些参数没有setter,而是实现了不可变对象(所以你只需要通过构造函数设置你的值).这使得对象线程安全,并且更容易调试/推理关于对象状态.