接口和抽象类有什么区别?

时间:2009-03-25 13:29:23

标签: oop interface abstract-class

重复:

  

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

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

你的回答是什么?

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

5 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

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

在Java中,“接口”是一个定义明确的语法元素,而在C ++中,它只是一种设计模式。

答案 2 :(得分:2)

接口提供了必须由类实现的方法的定义。接口的目的是允许您概括特定功能,而不管实现如何。您的IDatabase界面可能采用Open / Close方法。实现该接口的类可能连接到MySQL数据库或MS Access数据库。无论如何它完成此任务,目标仍然是相同的...打开数据库,关闭数据库。

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

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

希望有所帮助。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

就职业面试而言,我一直听说关键是界面是合约;一个接口,虽然没有自己实现,但保证了功能。