关于Java:接口和抽象类之间的区别是什么?

What is the difference between an interface and an abstract class?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Interface vs Abstract Class (general OO)

我不太清楚两者的区别。

谢谢


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

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

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

  • 您应该使用一个接口来定义一个契约。
  • 抽象类对于重用代码很有用…但请注意,这并不是重用代码的唯一方法。您还应该考虑其他方法,如遏制。

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


我喜欢把一个接口看作一个契约。任何实现接口的类都必须提供在调用契约中定义的任何方法时要做什么的详细信息。抽象类是定义一组实际行为的类,即不仅仅是稍后要实现的契约,但该类不能实例化。