成员函数的可见性
良好的程序设计应该尽可能减小类与类之间耦合,所遵循的经验法则是:尽量限制成员函数的可见性。如果成员函数没必要公有 (public),就定义为保护 (protected);没必要保护 (protected),就定义为私有 (private)。
可见性 | 说明 | 正确用法 |
public | 公有成员函数可被任何其它对象和类的成员函数调用。 | 当该成员函数必须被该函数所在的层次结构之外的其他对象和类所访问时。 |
protected | 被保护的成员函数可被它所在的类或该类的子类的任何成员函数调用。 | 当该成员函数提供的行为被它所在类的层次结构内部而非外部需要时。 |
private | 私有成员函数只可以被该类所在的其它成员函数调用,该类的子类不可以调用。 | 当该成员函数所提供的行为明确针对定义它的类时。私有成员函数常常是重新分配要素的结果。重新分配要素又叫“重组”,指类内其它成员函数封装某一个特定行为的做法。 |
字段可见性
当字段被声明为 protected 类型时,子类中的成员函数可能会直接访问它,有效地提高了类内层次结构的耦合性。这使类更难维护和加强,所以应该尽量避免。字段不应被直接访问,而应采用存取成员函数(参见下文)访问。
可见性 | 说明 | 正确用法 |
public | 一个公共字段可被任何其他对象或者类中的成员函数访问。 | 不要让字段公有。 |
protected | 被保护的字段可被它声明时所在的类及该类的子类的所有成员函数访问。 | 不要让字段被保护。 |
private | 私有字段只可以被它声明时所在的类的其它成员函数调用,该类子类中的函数不可以调用。 | 所有的字段都应置为私有,由获取和设置成员函数(存取函数)访问。 |
对于那些非长期性的字段(它们不被永久保留),应将它们标注为 static 或 transient 。使它们与 BDK 的约定一致。