第15条 :要么专门为继承而设计,并给出文档说明,要么禁止继承
» 为了允许继承,一个类必须遵守如下约定:
» 构造函数一定不能调用可被改写的方法。
第16条:接口优于抽象类
» 接口通常是定义具有多个实现的类型的最佳途径。
» 例外情形是当演化的容易性被灵活性和功能更为重要的时候。这时应该使用抽象类来定义类型。
» 如果导出了一个重要接口,应该考虑同时提供一个骨架实现类(skeletal implementation class)
» 尽可能谨慎设计所有的公有接口,并编写多个实现来测试它们。
第17条:接口是用于定义类型的
» 接口应该这是被用来定义类型的
» 常量接口模式是对接口的不良使用
如果需要导出常量,应该使用类型安全枚举类,如
public class PhysicalConstants{
private PhysicalConstants(){}//注意:构造函数应该是私有的,避免子类化
public static final AVOCADROS_NUMBER = .....;//注意,常量类型应该是static final的
}
第18条:优先考虑静态成员类
» 嵌套类有四种:静态成员类,非静态成员类,匿名类,局部类
» 非静态成员类的一种通用用法:允许外部类的一个实例被看做另一个不相关的类的实例。
例如,诸如Set和List这样的集合接口的实现往往使用非静态成员类来实现他们的迭代器
public class MySet extends AbstractSet {
public Iterator iterator(){
return new MyIterator();
}
public class MyIterator implements Iterator{
................
}
}
» 如果声明的成员类不要求访问外围实例,那么使用static修饰符使它成为静态成员类。