继承和接口是OOP程序设计语言中非常重要的两个概念,也是经常让程序员对其使用比较混淆的。什么时候用继承好一些,什么时候用接口好一些呢?

    首先,从OOP程序设计语言的多态特性来说两者都是多态的一种体现。继承更侧重于给对象进行归类(继承体系)和接口则侧重于对功能方法进行归类。

    每个类都属于特定的继承体系,所有的类向上转换最终只能转成一个基类。继承将"做什么"和"怎么做"耦合在一起,如果需要复用现有的方法必须将新增的类添加到现有的继承体系中(或者采用包装类)。

    接口则可以将"做什么"和"怎么做"分开,可以向上转换成多个基类。

    抽象类是接口和类之间的一个缓冲,是程序设计过程中一个非常重要的工具。因为我们总不可能总是全部用纯接口。比如有个接口A,如果采用纯接口方式。A1,A2,A3全部是A的实现类,如果A接口新增或修改任何旧的方法则都会影响到三个实现类,如果采用抽象类进行缓冲则可以先在抽象类中实现,然后A1,A2,A3按需覆盖抽象类中的方法以此达到影响最小。