第四章 类和接口 第18条 接口优于抽象类
程序员文章站
2023-12-21 13:15:34
...
抽象类的限制:只允许单继承(使用内部类可以模拟多重继承)
接口的优点:
- 方便现有类的扩展
- 接口是定义mixin(混合类型的理想选择)
- 接口允许我们构造非层次结构的类型框架,接口之间可以实现多重继承
- 通过包装类模式,接口使得安全地增强类的功能成为一种可能,如果使用抽象类来定义类型,那么 程序员队了使用继承的手段来增加功能,没有其它的选择,这样得到的类与包装类相比,功能更差,也更加脆弱
- 通过对你导出的第个重要接口都 提供一个抽象的骨架实现类,把接口和抽象类的优点结合起来
下面是骨架实现类的使用:
public class ArrayUtil {
static List<Integer> intArrayAsList(final int[] a){
return new AbstractList<Integer>(){
@Override
public Integer get(int index) {
return a[index];
}
public Integer set(int index,Integer value) {
int oldValue = a[index];
a[index] = value;
return oldValue;
}
@Override
public int size() {
return a.length;
}
};
}
}
骨架实现结合了接口有抽象类的优点:即提出了需求,又提供了最基本的帮助,骨架实现是为继承而设计的,对于继承,必需提供文档说明
骨架实现有个小小的不同,就是简单实现,如AbstractMap,这是为继承而设计的, 是一个最简单的实现,可以直接使用,也可以子类化
抽象类对比接口的明显优势:抽象类的演变比接口演变要容易得多,抽象类的中实现方法可以随意添加,而接口不行
骨架实现可以做为接口和具体实现类中的缓冲地带,因为接口一旦被公开发行,并且被广泛实现,想要修改几乎不可能