【问题标题】:When to only abstract class but not interface [duplicate]何时仅抽象类而不是接口[重复]
【发布时间】:2012-05-17 19:28:58
【问题描述】:

可能重复:
When to use abstract class or interface?

我了解抽象类和接口。但我想知道一个实时场景,我们只需要使用抽象类而不是接口,只需要使用接口而不是抽象类。谁能给我一些这样的例子。

我猜第二个是在需要多重继承时使用的,即一个类已经继承了某个类,所以我们不能在这里使用抽象类..我们只需要使用接口。同样,我需要一个示例,其中我们只使用抽象而不使用接口。

已编辑

只是为了给界面多加点。

考虑 java 库集合

                          Collections

            List                                Set

所有 3 都是接口,但主要的东西,尽管它们具有常见的功能,即 add , addAll , contains ,containsAll 等。 List 以自己的方式实现并以另一种方式实现 set (讲述重复)。设置不允许重复列表允许重复。

所以我想说的是,当超级接口的子接口没有共同特征时,我们必须去接口

但是,如果有一些共同的功能,那么两者都将其保留为抽象类。

我需要一个用 java api 完成的实际示例。 谢谢。 信德

【问题讨论】:

  • 对于这个问题,互联网上确实有 数千个 的答案。
  • Sindhu,这是作业吗?请分享您对答案的最佳猜测,我们可以告诉您您是否走在正确的轨道上。

标签: java


【解决方案1】:

抽象类适用于通用功能,这与定义 API 的接口没有太大关系。

如果除了抽象类的子类之外你永远不会有实现,你可以跳过接口。不过我真的想不出一个实际的例子,因为我一直想要这个接口,所以我可以为单元测试创​​建模拟实现。

跳过抽象类更为常见。在这种情况下,每个项目都遵循一个接口,但不共享任何实现。您可能有一个带有 JDBC、FTP 等实现的“ConnectionService”接口,其中这些实现是如此特定于它们的协议,以至于抽象类没有增加任何价值。

【讨论】:

    【解决方案2】:

    通常,当您希望您的类能够从链中的前一个类继承时,您可以使用超类层次结构。

    超类可以是 Animal

    动物可以是食草动物,也可以是肉食动物。

    草食动物可以是马。

    食肉动物可以是狼。

    马可以是牧神。

    狼可以是幼崽。

    等等。

    您通常只在您想强制添加某些功能时才实现接口,但根据具体情况有所不同,因为接口只实现方法签名而不是实际功能。你必须这样写。

    【讨论】:

      猜你喜欢
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2011-12-05
      • 2011-07-02
      相关资源
      最近更新 更多