前言
本部分总结effective java第四章类和接口的内容。
条例
- 封装的重要性:它可以有效地解除组成系统的各个模块之间的耦合关系,使这些模块可以独立的开发、测试、优化、使用、理解和修改。
- 尽可能地使每个类或者成员不被外界访问。
如果一个类可以声明为包级私有,那么就应该声明为包私有的,使之成为包的一部分,而不是API的一部分。
如果一个包私有的顶层类或接口只被一个类使用,那么久应该考虑让这个类成为其私有嵌套类。 - 受保护的成员也是API的一部分,必须永远得到支持
- 如果方法覆盖了超类中的一个方法,子类中的访问级别就不能低于超类中的访问级别(java语言自身的设计,为了确保任何可以使用超类实例的地方也可以使用子类的实例)
- 可以为了测试将一个公有类的私有成员提高到包级私有的,但不能超过这个级别。
- 实例域决不能是公有的。
- 静态域也不能是公有的,一种情况下除外:常量构成了类提供整个抽象中的一部分,可以通过公有的静态final域来暴露这些常量。不要让final域包含可变对象的引用。
- 在公有类中使用访问方法而非公有域。然而如果累是包级私有或者私有的嵌套类,直接暴露它的数据域并没有本质的错误。
- 类具有公有的静态的final数组域,或者返回这种域的访问方法,这几乎总是错的,因为final域的长度非0的数组总是可以改变其值的。
- 使可变性最小化,例如String类 第64页-第70页
- 当扩展一个类时,复合优先于继承,因为使用继承的方式扩展很难保证将来父类更新时不会影响子类实现。和复合总是可以保证。只有当确定B is-a A 的时候,类B才应该扩展类A。
- 第76页