1.如果类的构造函数或可被覆盖的方法(使用public/protected修饰),调用了另一个可被覆盖的方法,那么必须使用文档说明前者是如何调用后者的,甚至可说明前者的具体内部实现。如4.16小节,应使用文档说明addAll()是如何调用add()方法的
注:一般方法的注射只应该说明此方法做什么(what),而不应该说明如何做(how)
2.父类可能提供protected的钩子(hook)方法,以便子类能够参与进父类的运算过程。应使用注释说明这些hook方法
3.在发布一个可被继承的父类前,建议写至少3个子类进行测试(应由父类开发人员以外的人编写)
4.在父类的构造函数、clone(),序列化相关方法里,不要调用可被覆盖的方法。以下代码调用子类的println()将打印null
public class Parent {
public Parent(){
println();//never do this
}
public void println(){
}
}
public class Child extends Parent {
private Date date;
public Child(){
//子类会先调用父类的构造函数
date=new Date();
}
@Override
public void println() {
System.out.println(date);
}
}
5.对于没有良好设计和文档说明的类,应禁止继承(可使用final声明,或仅提供私有构造函数)
6.如果没有任何构造函数或可覆盖方法调用另一个可覆盖的方法,那么此类是可以安全继承的。可把可覆盖方法里的代码移动到一个private方法里(helper method),然后其它所有方法都调用此私有方法,进而可消除可覆盖方法之间的互相调用