可能重复:
Interface vs Base class
我只是在考虑何时应该使用Interface而不是抽象类。 我知道接口对于多重继承很有用,但除了它提供的抽象类的其他优点之外呢?
答案 0 :(得分:2)
接口定义了行为契约。如果要提供共享实现或公共代码等,请使用抽象类。
接口用于表示给定类型提供实现,以便期望接口的代码知道如何处理它。它允许多态行为,只要您的自定义类实现了接口,我的公共API就可以将您的类作为我的界面并使用它。
摘要提供了派生类型的实现,接口要求实现类型的实现。
答案 1 :(得分:1)
总是更喜欢接口而不是抽象类。如果需要提供某种实现,请创建一个实现基本接口的抽象类。因此,您可以提供一些实现,同时您可以选择扩展抽象类还是实现接口。
抽象类强制您扩展它们以履行合同。因为你应该更喜欢使用组合而不是继承,所以使用类x的私有实例更容易创建自己的类,它实现接口y并使用包装器实现y,而不是扩展抽象类。 (例如战略模式)
查看有效的java,第18项以获取更多信息。
答案 2 :(得分:0)
一个类可以实现多个接口,但只能继承一个抽象类。
进一步说,语义上存在差异。继承类表示is-a
关系,在实现接口时,您将获得has-a
关系。
将接口与组合(称为strategy模式)结合使用,可以实现非常灵活的设计,可以在运行时进行更改。