【问题标题】:What's the difference between an interface and an abstract class? [duplicate]接口和抽象类有什么区别? [复制]
【发布时间】:2010-11-13 01:11:16
【问题描述】:

重复:

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

可能是最著名的软件开发人员面试问题之一。

你的答案是什么?

编辑:我试图找出您在现实生活中如何回答这个问题。请尝试像在真正的工作面试中一样制定您的答案(要完整,但不要太长,当然不要发布链接)。

【问题讨论】:

  • 我不想听起来像当地的问题结束民兵的成员,但这已经在这里讨论了超过 1100 亿次。 stackoverflow.com/questions/479142/…
  • 完全同意;之前问过很多次。
  • 好吧,这个问题是关于“有什么区别”,而另一个问题是“你什么时候会使用其中一个” - 恕我直言,这足以证明自己的问题......跨度>
  • @DevSolar:这个问题的细微变化出现了很多次,而不仅仅是引用的那个......

标签: oop interface abstract-class


【解决方案1】:

接口仅描述其方法等的实际签名。任何实现该接口的类都必须提供显式实现。

抽象类可以包含其方法等的部分实现。

【讨论】:

    【解决方案2】:

    抽象类可以有成员变量,接口不能(或者,在 C++ 中,不应该不)。

    在 Java 中,“接口”是定义良好的句法元素,而在 C++ 中,它只是一种设计模式。

    【讨论】:

    • 答案以“立即回答”的形式给出。我知道这并不详尽,但这是我临时提出的。
    【解决方案3】:

    接口提供了类必须实现的方法的定义。接口的目的是允许您概括特定功能而不管实现如何。你可能有一个IDatabase 接口,它有一个Open/Close 方法。实现该接口的类可能连接到 MySQL 数据库或 MS Access 数据库。不管如何完成这个任务,目标还是一样的……打开数据库,关闭数据库。

    抽象类是包含一些抽象方法的基类。它们不能被实例化,它们将被派生出来。抽象类的目的是允许您定义一些通用功能和子类以在适当的情况下实现更具体的功能。

    所以总而言之,当每个类的实现完全不同时,你应该使用接口。当您有一些类似的行为但需要以不同的方式实现部分时,请使用抽象类。

    希望对您有所帮助。

    【讨论】:

      【解决方案4】:

      我会说差异取决于语言,但至少在 C++ 中,抽象类是实现接口的手段。

      【讨论】:

        【解决方案5】:

        关于工作面试,我一直听说关键点是界面就是契约;一个接口,虽然不自己实现,但保证了功能。

        【讨论】:

          猜你喜欢
          • 2013-02-17
          • 2010-12-27
          • 2012-04-28
          • 2019-10-17
          • 2019-12-14
          • 2012-07-19
          • 2011-04-04
          相关资源
          最近更新 更多