一、设计目的
abstract class与interface两者本身的设计目的是不同的。
接口的设计目的,是对类的行为进行约束。它只约束了行为的有无,但不对如何实现行为进行限制。
抽象类的设计目的,是代码复用。在抽象类中实现方法,避免让所有的子类来实现此方法,达到代码复用的目的。
二、内容角度
接口是对事物的行为进行抽象,针对的是行为。
抽象类是对具体事物的抽象,针对的是具体事物。
三、关系角度
继承是一个 "是不是"的关系。
接口实现则是 "有没有"的关系。
如果一个类继承了某个抽象类,则子类必定是抽象类的种类。
而接口实现则是有没有、具备不具备的关系。有接口中的行为则可以实现这个接口,没有就不实现这个接口。