设计模式之美---接口和抽象类的区别

抽象类:

  1. 抽象类不能被实例化,只能被继承(不能new)
  2. 抽象类可以包含属性和方法,方法可以包含实现,也可以不包含实现(abstract方法)
  3. 子类继承抽象类必须实现所有的抽象方法  
  4. 抽象类也是类,跟子类的关系是is-a
  5. 继承本身并不要求父类是抽象类,但是抽象类编译的时候会要求子类强制实现抽象方法。

接口

  1. 接口不能包含属性 
  2. 接口只能声明方法,不能包含实现
  3. 类实现接口的时候,必须实现所有的方法
  4. 接口表示具有什么功能,是has-a的关系

什么时候用接口?什么时候用抽象类?

  • 如果我们要表示is-a的关系,并且为了解决代码复用的问题可以用抽象类
  • 如果我们要表示has-a的关系,并且是为了解决抽象而非代码复用的问题可以使用接口
原文地址:https://www.cnblogs.com/guangmangchen/p/14017176.html