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

这个问题在这里已经有了答案:

  • 界面还是抽象类? 15个答案

  • 抽象类和接口之间存在技术差异,作为抽象类可以包含方法,字段,构造函数等的实现,而接口只包含方法和属性原型。 一个类可以实现多个接口,但它只能继承一个类(抽象或其他)。

    但是,在我看来,接口和抽象类最重要的区别是语义上的差异。

    一个接口定义了什么可以做(它的行为),一个抽象类定义了什么是。

    IEnumerable为例,其背后的语义意义是任何实现IEnumerable东西都是可枚举的,它并不意味着它是一个枚举,而是它可以像一个枚举(可以枚举)。

    与洗衣机的例子相比,任何继承它的东西都是一种洗衣机。 任何继承它的东西都会是一台洗衣机,一台顶部装载机或侧面装载机等。

    相反,如果你有一个名为ICanWash的接口,它可以包含一个名为Wash的方法。 你可以有各种各样的东西来实现ICanWash ,无论是一个Person ,一个抽象的洗衣机类,等等,其中实际的实现并不重要,只需要知道它的行为就是可以清洗的东西。

    总之,类定义了什么是东西,接口定义了什么可以做。


    来自MSDN:

    例如,通过使用接口,您可以在一个类中包含多个来源的行为。 该功能在C#中非常重要, 因为该语言不支持类的多重继承

    因此,如果您希望任何类都可以继承该方法,请使用接口。

    从相同的MSDN页面:

    另外,如果你想模拟继承结构,你必须使用一个接口,因为它们实际上不能从另一个结构或类继承。


    接口允许类继承/实现多个接口,而在C#中,只能从一个类继承。

    基本上是多重继承。

    链接地址: http://www.djcxy.com/p/54243.html

    上一篇: What's the difference between an abstract class and an interface?

    下一篇: How do you set a conditional in python based on datatypes?