我什么时候应该去接口,什么时候去抽象类?

时间:2010-06-21 09:50:32

标签: .net oop

  

可能重复:
  Interface vs Base class

我只是在考虑何时应该使用Interface而不是抽象类。 我知道接口对于多重继承很有用,但除了它提供的抽象类的其他优点之外呢?

3 个答案:

答案 0 :(得分:2)

接口定义了行为契约。如果要提供共享实现或公共代码等,请使用抽象类。

接口用于表示给定类型提供实现,以便期望接口的代码知道如何处理它。它允许多态行为,只要您的自定义类实现了接口,我的公共API就可以将您的类作为我的界面并使用它。

摘要提供了派生类型的实现,接口要求实现类型的实现。

答案 1 :(得分:1)

总是更喜欢接口而不是抽象类。如果需要提供某种实现,请创建一个实现基本接口的抽象类。因此,您可以提供一些实现,同时您可以选择扩展抽象类还是实现接口。

抽象类强制您扩展它们以履行合同。因为你应该更喜欢使用组合而不是继承,所以使用类x的私有实例更容易创建自己的类,它实现接口y并使用包装器实现y,而不是扩展抽象类。 (例如战略模式)

查看有效的java,第18项以获取更多信息。

答案 2 :(得分:0)

一个类可以实现多个接口,但只能继承一个抽象类。

进一步说,语义上存在差异。继承类表示is-a关系,在实现接口时,您将获得has-a关系。

将接口与组合(称为strategy模式)结合使用,可以实现非常灵活的设计,可以在运行时进行更改。