1、java 提供了两种允许多个实现的类型:接口、抽象类
- 抽象类允许某些方法的实现,接口不允许
- 为了实现抽象类定义的类型,类必须成为抽象类的子类
- java只允许单继承,抽象了我受到了极大的限制
- 任何一个类,只要实现了所有定义的必要方法,就被允许实现一个接口(无论该类处于什么层次)
2、现有类可以很容易被更新,以实现新的接口
3、接口是混合(mixin)类型的理想选择
4、接口允许我们构建非层次结构的类型框架
5、接口使得安全的增强类的功能成为可能
- 抽象类则除了继承没别的好办法
6、每个重要接口都提供一个骨架实现类
- 接管所有与接口实现相关的类
- 骨架类就是一个抽象类,他可以实现一个接口
- 接口和抽象类的优点结合起来
- 如下面静态工厂的实现,骨架实现类,为抽象类提供实现上的帮助,有没有严格限制
- 可以用内部私有类模拟多重继承
7、抽象类演变比接口演变容易得多
8、设计公有接口需要非常谨慎,一旦公开被广泛接受,再想修改是不可能的
9、总结:
- 接口通常是定义允许多个实现的类型的最佳途径
- 当演变容易性比灵活性更重要时,选择抽象类,接受她的局限
- 重要接口坚决使用骨架实现类