在公共类中使用访问方法而不是公共属性

有时候,你可能会试图写一些退化的类(degenerate classes),除了集中实例属性之外别无用


class Point {
public double x;
public double y;
}

  由于这些类的数据属性可以直接被访问,因此这些类不提供封装的好处(详见第 15 条)。 如果不
更改 API,则无法更改其表示形式,无法强制执行不变量,并且在访问属性时无法执行辅助操作。 坚持
面向对象的程序员觉得这样的类是厌恶的,应该被具有私有属性和公共访问方法的类(getter)所取
代,而对于可变类来说,它们应该被替换为 setter 设值方法

如果一个类在其包之外是可访问的,则提供访问
方法来保留更改类内部表示的灵活性。 如果一个公共类暴露其数据属性,那么以后更改其表示形式基
本上没有可能,因为客户端代码可以散布在很多地方
但是,如果一个类是包级私有的,或者是一个私有的内部类,那么暴露它的数据属性就没有什么本
质上的错误——假设它们提供足够描述该类提供的抽象。 在类定义和使用它的客户端代码中,这种方法
比访问方法产生更少的视觉混乱。 虽然客户端代码绑定到类的内部表示,但是这些代码仅限于包含该类
的包。 如果类的内部表示是可取的,可以在不触碰包外的任何代码的情况下进行更改。 在私有内部类
的情况下,更改作用范围进一步限制在封闭类中


你可能感兴趣的:(在公共类中使用访问方法而不是公共属性)