0

复制:

何时使用接口而不是抽象类,反之亦然?

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

你的答案是什么?

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

4

5 回答 5

7

An interface only describes the actual signature of its methods etc. Any class implementing that interface must then provide an explicit implementation.

An abstract class can contain a partial implementation of its methods etc.

于 2009-03-25T13:36:29.257 回答
2

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

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

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

希望有帮助。

于 2009-03-25T14:06:20.603 回答
2

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

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

于 2009-03-25T13:32:38.610 回答
0

As far as job interviews are concerned, I've always heard that the key point is that an interface is a contract; an interface, while not implementing it itself, guarantees functionality.

于 2009-03-25T13:36:19.897 回答
0

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

于 2009-03-25T13:32:10.920 回答