一个专门为了继承而设计并且具有良好文档说明的类,意味着:
- 该类的文档必须精确地描述了改写每一个方法所带来的影响 该类必须有文档说明其可改写的方法的自用性:对于每一个公有的或受保护的方法或者构造函数,它的文档必须指明它调用了哪些可改写的方法是以什么顺序调用,每个调用的结果是如何影响后续的处理过程的。 惯例是如果一个方法调用了可改写的方法,那么在它的文档注释的末尾应该包含关于这些调用的描述信息。
- 为了使程序员能够编写出更加有效的子类,而无需承受不必要的痛苦,一个类必须通过某种形式提供适当的钩子(hook),以便能够进入到它的内部工作流程中,这样的形式可以是精心选择的受保护方法,也可是以保护域,后者少见。 当为了继承的目的而设计一个有可能会被广泛使用的类时,须意识到,对于文档中所说明的自用模式(self-use pattern),以及对于其受保护方法和域所隐含的实现细节,实际上已经做出了永久的承诺。这些承诺使得你在后续的版本中提高这个类的性能或增加很功能非常困难,或者不可能。
- 构造函数一定不能调用可改写的方法,无论是直接还是间接进行,因为超类的构造函数在子类的构造函数之前运行。
- 在一个为了继承而设计的类中,实现Cloneable或Serializable接口,因为clone和readObject方法在行为上非常类似于构造函数,所以无论clone还是readObject都不能调用一个可改写的方法,无论是直接还是间接的方式。 对于readObject方法,子类中改写版本的方法将在子类的状太被反序列化之前先被运行;对于clone方法,改写版本的方法将在子类的clone方法有机会修正被克隆对象的状态之前先被运行。
- 在一个为了继承而设计的类中实现Serializable接口,且该类有一个readResolve或writeReplace方法,则你必须使readResolve或者writeReplace成为受保护的方法,而不是私有的方法。
为了继承而设计一个类,要求对这个类有一些实质性的限制。对于那些并非为了安全地进行子类化而设计和编写文档的类(如普通的具体类),禁止子类化。有两种办法可以禁止子类化:
- 把类声明为final。
- 把所有的构造函数变成私有的或包级私有的,增加一些公有的静态工厂来替代构造函数的位置。
如果必须从这样的类来继承,则要确保这类永远不会调用到它的可改写的方法。
分享到:
相关推荐
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
Java基础 java学习笔记 Java Java基础Markdown学习笔记,可转换成PDF、Word等格式
JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记
java学习笔记,java基础知识,只用于个人学习。
java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...
java学习笔记.doc java学习笔记 java学习 学习笔记 java
Java学习笔记:JavaSe、Spring、JVM、MySQL、MyBatis...
在学习java过程中的笔记。
林信良的《JAVA学习笔记》电子版,从作者网站中下载
java学习笔记
狂神说java学习笔记,markdown版
java学习笔记java学习笔记java学java学习笔记习笔记
Java项目学习笔记: SSM实战项目——Java高并发秒杀API,详细流程+学习笔记
Java Swing组件:Jlist学习笔记Java Swing组件:Jlist学习笔记
在学Java中做的一些总结、积累,希望对大家有帮助。
Java 学习笔记.pdf Java 学习笔记.pdf Java 学习笔记.pdf Java 学习笔记.pdf
林信良学习笔记(内容):ajax学习笔记,算法学习笔记,计算机图形学,C++学习笔记,设计模式,Hibernate学习笔记,Java学习笔记,JSF,JSP/Servlet,JUnit,Spring,Struts等
良葛格的Java学习笔记~讲解得非常详细。JDK5.0的~是Java入门的不错选择。
Java学习笔记(源码)Java学习笔记(源码)Java学习笔记(源码)Java学习笔记(源码)Java学习笔记(源码)Java学习笔记(源码)