要么为继承而设计,并提供文档说明,要么就禁止继承
首先该文档必须精确的描述覆盖每个方法所带来的影响。该类必须有文档说明它可覆盖的方法的自用型。
关于文档的格言:好的API文档应该描述一个给定的方法做了说明工作,而不是描述它是如何做的。为了继承而进行的设计不仅仅设计自用模式的文档设计。为了使程序员能够编写出更加有效的子类,而无需承受不必要的痛苦,类必须通过某种形式提供适当的勾子(hook),以便能够进入到它的内部工作流程中,这种形式是可以精心选择的受保护的方法。
对于为了继承而设计的类,唯一的测试方法就是编写子类。而对发布类进行编写子类进行测试时非常必要的。通常需要通过3个子类的编写去测试一个可扩展的
类。
为了允许继承,构造器绝不能调用可覆盖的方法,无论时直接调用还是间接调用。如果违反,可能会导致程序失败。clone和readObject在功能上非常类似域构造器,所以不许不能调用可覆盖的方法。到现在为止,为了继承而设计的类,对这个类会有一些实质性的限制。对于普通类(既不是为继承而设计,也不是final的),最佳的解决方案时对于那些并非为了安全的进行子类化而设计和编写文档的类,要禁止实例化。