概述
在软件设计中,封装是面向对象编程的基本原则之一。为了确保灵活性和安全性,公共类应通过访问器方法(getter)和修改器方法(setter)来访问字段,而不是直接暴露公共字段。这有助于后续的维护和修改。
退化类的示例
有时候,您可能会倾向于编写退化的类,这些类的唯一作用就是将实例字段分组:
java">// 这样的退化类不应该是公共的!
class 坐标点 {public double x;public double y;
}
由于此类的字段可以直接访问,这样的类不提供封装的好处(参见第15条)。直接暴露字段意味着:
- 无法在不更改API的情况下更改类的内部表示。
- 无法强制实施不变量。
- 无法在字段被访问或修改时执行任何操作。
这些问题可能导致数据不一致或难以维护。因此,严格的面向对象程序员认为此类设计应当避免,应该始终使用私有字段并提供公共的访问器方法(getter)和修改器方法(setter):
封装的实现
java">// 通过访问器方法和修改器方法封装数据
class 坐标点 {private double x;private double y;// 构造函数,用于初始化坐标点对象public 坐标点(double x, double y) {this.x = x;this.y = y;