接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?

67 阅读1分钟

抽象类和接口的区别

抽象类特性

  1. 抽象类不允许被实例化,只能被继承。
  2. 抽象类可以包含属性和方法。
  3. 子类继承抽象类,必须实现抽象类中的所有抽象方法。

接口的特性

  1. 接口不能包含属性
  2. 接口只能声明方法,方法不能包含代码实现
  3. 类实现接口的时候,必须实现接口中声明的所有方法

抽象类和接口能解决什么编程问题?

抽象类更多的是为了代码复用,而接口就更侧重于解耦。接口是对行为的一种抽象,相当于一组协议或者契约,你可以联想类比一下 API 接口。调用者只需要关注抽象的接口,不需要了解具体的实现,具体的实现代码对调用者透明。接口实现了约定和实现相分离,可以降低代码间的耦合性,提高代码的可扩展性。

如何决定该用抽象类还是接口?

如果我们要表示一种 is-a 的关系,并且是为了解决代码复用的问题,我们就用抽象类;如果我们要表示一种 has-a 关系,并且是为了解决抽象而非代码复用的问题,那我们就可以使用接口。

此文章为 8 月Day8学习笔记,内容来源于 极客时间《设计模式之美》