接口和抽象类的区别
- 抽象类中可以存在普通的成员函数,而接口中只能存在
public abstract
方法。 - 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是
public abstract final
类型的。 - 抽象类只能继承一个类,而接口可以实现多个。
- 接口的设计目的是对类的行为进行约束,他只约束了行为的有无,但不对如何实现行为进行约束。抽象类的设计目的是代码复用,当不同的类具有相同的行为,且一部分行为的实现方式一致时,可以让这些类派生于一个抽象类,避免了让所有子类都来实现相同的行为,达到了代码复用的目的,抽象类不允许实例化。
- 抽象类是对类本质的抽象,表达的是
is a
的关系,抽象类包含并实现子类的通用特性,将子类存在差异化的特性进行抽象,交由子类去实现;接口是对行为的抽象,表达的是like a
的关系,接口的核心的定义行为,即实现类可以做什么,至于实现类的主体是谁、是如何实现的,接口并不关心,只是针对一个动作的描述。 - 当关注事物本质的时候用抽象类;当关注一个操作的时候,用接口。