4.17 不要继承没有良好设计和文档说明的类

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),然后其它所有方法都调用此私有方法,进而可消除可覆盖方法之间的互相调用

 

你可能感兴趣的:(继承)