接口和抽象类有什么区别?

可能重复:
接口与抽象类(通用OO)

我不太清楚差异。

谢谢

它们非常相似,但存在一些重要的技术差异:

  • 抽象类允许您为某些方法提供默认实现,但接口不允许您提供任何实现。
  • 您可以实现多个接口,但只能从一个抽象类inheritance。

这些差异会影响应该如何使用这两种技术:

  • 您应该使用接口来定义合同
  • 抽象类可以用于重用代码 ……但请注意,它不是重用代码的唯一方法。 您还应该考虑其他方法,例如收容。

接口不允许定义任何成员方法,而抽象类允许定义部分或全部。 然而,类只能扩展一个类(抽象或不抽象),但可以实现任意数量的接口。

我喜欢将接口视为合同。 任何实现接口的类都必须提供有关在调用合同中定义的任何方法时要执行的操作的详细信息。 抽象类是一个定义了一组实际行为的类,即不仅仅是稍后要实现的合同,而且该类无法实例化。