3.9 对象应当隐藏数据并暴露方法

对象的状态存储在成员变量中。这些成员变量都是数据。数据不应被外界直接访问,而只应当通过暴露方法和属性的方式来访问。

为什么应当隐藏数据并暴露方法呢?

隐藏数据并暴露方法在面向对象编程的世界中称为封装。封装对外隐藏了类的内部工作方式。因此,即使更改了数据值的类型,也不会破坏现有的依赖该类的实现。(封装后的)数据可以设置为可读可写、可写或者只读的,这样可以更加灵活地访问和使用数据。此外,还可以对数据进行校验以防止收到非法数据。封装同样可以降低类的测试难度,提高类的复用性和扩展性。

接下来将会以范例的形式进行说明。

封装范例

以下代码范例展示了如何封装类。Car对象是可更改对象。它的属性在初始化后也是可读可写的。构造器调用时和属性赋值时都会执行参数验证。如果参数为非法值则抛出参数值非法异常,否则将传递参数并更改数据值。

上述代码的好处在于当属性的getset方法对数据的验证发生改变时不会影响现有的实现。