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

时间:2011-06-28 12:29:36

标签: java

  

可能重复:
  When to use an interface instead of an abstract class and vice versa?

任何人都可以告诉我在什么情况下我们应该选择接口和抽象类。

欢迎Java特定方面。

6 个答案:

答案 0 :(得分:3)

除非您需要......否则始终使用界面

  • ...为子类提供一些 state
  • ...使用某些方法的默认实现提供子类
  • ...希望推迟一些抽象方法的实现

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

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

答案 1 :(得分:1)

用简单的语言:

如果希望通过常规方式访问对象,请使用界面。 如果要在超类中定义某些功能并定义必须在子类中重写的某些方法的原型,即扩展类的功能,请使用抽象类。 这是一个有趣的例子,可以帮助你清除基本面。

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

答案 2 :(得分:0)

如果您不想实施任何方法而只想定义合约,则使用界面。

但是,如果您确实想要实现某些实现,则应使用抽象类。

答案 3 :(得分:0)

答案 4 :(得分:0)

如果要为要扩展的子类提供部分实现,则使用抽象类;如果只想提供必须实现的方法的签名,则使用接口。 提供接口这两个实现其部分的抽象类是完全正常的。

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

答案 5 :(得分:0)

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

另一方面,任何类都可以通过将abstract放在其声明前面来抽象。他们可以声明抽象方法并实现接口和其他抽象类,而无需定义方法实现。

抽象类在继承方面更具限制性(只有一个可以为子类提供父级),但是你可以在其中实现方法和构造函数。

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

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