抽象类是接口的一种类型吗?

3

在我的/interfaces文件夹中,我放置了所有的接口。

抽象类是接口的一种类型吗?


没问题 Marc,这更加公平,抱歉啊。 - mrblah
3
自从@marc_s的评论之后,他的接受率提高到了55%——进展不错! - jcollum
5个回答

14
描述技术差异的答案是正确的,但不仅如此。还有一种语义上的区别。
接口和抽象类之间的区别在于接口代表了“做某事”的能力,而抽象类代表了一类对象的共通性。
IDisposable 接口表示“我知道如何处理我的重要资源”这个概念;这是对象“可以做”的事情,而不是对象“是”的事情。
相比之下,如果你创建一个抽象类 Animal,那么它将代表所有动物的共同特征。世界上没有“动物”而不是更具体的动物——金毛寻回犬、帝王鲑、狮子等等。我们通过将类声明为抽象来表示这个事实。

10

在C#中,接口与类(甚至抽象类)有所不同;

  • 接口只能定义API(方法签名、事件声明、属性声明),而不能定义实现细节(字段、方法体等)
  • 您只能继承一个基类,但可以实现多个接口

但在某些用法上它们也有相似之处 - 例如在抽象工厂实现中的使用。


5

不是的。它们有几个区别。主要区别在于抽象类中可以包含实现细节。一个类只能从一个(抽象)类派生,但它可以实现多个接口。抽象类可以包含字段,而接口不能。最后,接口不能在声明的方法上具有访问修饰符,但抽象类可以。


2

不是的。抽象类应该包括某些实现,因此它不仅仅是一个接口。


1
一个所有方法都是抽象的类可以被视为一种接口,但是这时候为什么不直接使用接口呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接