第四章 类和接口 第18条 接口优于抽象类

抽象类的限制:只允许单继承(使用内部类可以模拟多重继承)

接口的优点:

  1. 方便现有类的扩展
  2. 接口是定义mixin(混合类型的理想选择)
  3. 接口允许我们构造非层次结构的类型框架,接口之间可以实现多重继承
  4. 通过包装类模式,接口使得安全地增强类的功能成为一种可能,如果使用抽象类来定义类型,那么 程序员队了使用继承的手段来增加功能,没有其它的选择,这样得到的类与包装类相比,功能更差,也更加脆弱
  5. 通过对你导出的第个重要接口都 提供一个抽象的骨架实现类,把接口和抽象类的优点结合起来

下面是骨架实现类的使用:

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,这是为继承而设计的, 是一个最简单的实现,可以直接使用,也可以子类化

抽象类对比接口的明显优势:抽象类的演变比接口演变要容易得多,抽象类的中实现方法可以随意添加,而接口不行

骨架实现可以做为接口和具体实现类中的缓冲地带,因为接口一旦被公开发行,并且被广泛实现,想要修改几乎不可能 

猜你喜欢

转载自blog.csdn.net/perfect_red/article/details/80503409
今日推荐