我们何时应该使用Java中的接口或抽象类?

When shall we go for interface or abstract class in Java?

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

Possible Duplicate:
When to use an interface instead of an abstract class and vice versa?

有谁能告诉我在什么情况下我们应该使用接口和抽象类吗?

欢迎使用Java特定的方面。


始终使用接口,除非需要…

  • …为子类提供某种状态
  • …为子类提供一些方法的默认实现
  • …希望推迟一些抽象方法的实现

注意,您只能扩展一个类,而您可以实现多个接口。因此,如果子类有可能需要扩展其他类,那么就努力使用接口。

以下是讨论此主题的一些好链接:

  • Java世界:抽象类与接口
  • 接口与抽象类(常规OO)
  • 抽象类与接口
  • mindprod:接口与抽象类

简单语言:

如果您希望通过公共方式访问对象,请使用Interface。如果要在超级类中定义一些功能,并且要定义一些必须在子类中重写的方法的原型(即扩展类的功能),请使用抽象类。下面是一个有趣的例子,可以帮助你理清基本原理。

http://ganeshtiwaridotcmdotnp.blogspot.com/2011/05/understanding-importance-of-interface.html


接口只是public方法签名和public static final字段的集合。没有构造函数,没有受保护的/内部方法,没有其他类型的字段。

另一方面,只要将abstract放在声明前面,任何类都可以是抽象的。它们可以声明抽象方法,实现接口和其他抽象类,而无需定义方法实现。

抽象类在继承(只有一个可以作为子类的父类)方面限制更大,但您可以在其中实现方法和构造函数。

一个类可以实现任意数量的接口,但没有默认的方法和构造函数实现。

这就是为什么在接口旁边提供一个抽象类作为默认实现选项总是一个好主意。


如果希望为要扩展的子类提供部分实现,则将使用抽象类;如果只希望提供必须实现的方法的签名,则将使用接口。提供和接口以及实现部分接口的抽象类是完全正常的。

然而,抽象类有一个限制:在一个子类中,只能扩展一个(抽象)类,但是可以在一个类中实现任意多的接口。


检查这些

  • http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract.html

  • 抽象类和接口


如果不想实现任何方法,只想定义契约,那么就使用一个接口。

但是,如果您确实希望已经有一些实现,那么应该使用一个抽象类。