在面向对象编程中,有两个特殊也是比较难理解的概念,就是接口和抽象类。对于概念不再赘述,可以查阅相关文档。本文重点就接口和抽象类的异同点进行比较,并说明各自的应用环境。

  接口和抽象类之所以特殊,是因为它们有一个不同于一般类的共同特点,在接口和抽象类中可以只写方法而没有具体实现(在接口中绝对不能有具体实现,在抽象类中没有具体实现的方法叫做抽象方法)。至于为什么要有没有具体实现的方法在浅析接口的作用及应用一文中以有介绍。下面主要介绍接口和抽象类的异同点及其各自应用的环境。

  在某种程度上接口想一个抽象类,或者可以说接口是一个纯的抽象类。因为在接口和抽象类中,都可以不用有方法的具体实现(接口中是不能有),不同的是,在抽象类中非抽象方法是有具体实现的。

  接口和抽象类还有一个很重要的不同点就是:类可以继承多个接口,但是只能继承一个抽象类。

   接口和抽象类的不同之处决定了各自有各自的最佳应用环境:

1.  如果预计要创建组件的多个版本,则创建抽象类。因为可以通过更新基类,使所有继承类都自动更新。而接口一般要求在定义后就不能更改,这样是为了保护为使用接口而编写的现有系统。

2.  如果要设计小而简练的功能块,则使用接口;若果要设计大的功能单元,则使用抽象类。因为接口设计往往应该小而且独立,减少发生性能问题的可能性;

3.  如果要在组件的所有实现间提供通用的已实现的功能,则使用抽象类;因为抽象类可以部分实现方法;而接口不能;

4.  若果创建的功能将在大范围的完全不同的对象间使用,则使用接口。