‫在本课中, 您将学习抽象类和接口之间的关键区别｡
‫在设计应用程序时, 了解何时使用抽象类､
‫何时使用接口以及何时两者都不使用是非常重要的｡
‫抽象类和接口在某些方面看起来很相似, 但它们之间存在着关键的区别,
‫这将决定哪一个是您试图实现的最佳选择｡
‫理解抽象类和接口之间的区别是非常重要的,
‫这样我们才能设计出松散耦合和可扩展的应用程序, 这样我们就可以在不破坏一切的情况下轻松地修改和更改应用程序｡
‫我们将在本视频中讨论这些差异以及如何决定何时使用哪一种｡
‫但在此之前, 首先, 让我们回顾一下抽象类和接口｡
‫首先, 抽象类｡
‫抽象类是一个不完整的类, 或者是一个不能被实例化的类, 这意味着我们不能从它创建对象｡
‫抽象类的目的是为派生类提供蓝图, 并设置一些规则, 如派生类必须实现的规则｡
‫但是为什么我们需要一个类在开始就被标记为抽象类呢？
‫普通班有什么不好？
‫想象一下, 我们有一辆摩托车和一辆汽车, 它们共享一些功能来减少代码冗余｡
‫我们创建了一个名为vehicle的基类, 以防止创建vehicle类型的实例, 并强制每个方法实现各自版本的vehicle方法｡
‫我们必须将其标记为抽象类｡
‫我们可以利用抽象类来设计组件, 并指定必须由派生类实现的某种级别的公共功能｡
‫所以让我们把这辆车抽象化, 这样就可以了｡
‫现在, 让我们再次了解一下接口｡
‫因此, 接口是一个协定, 它只能包含方法声明｡
‫它不能包含方法定义｡
‫它们定义了类所具有的能力｡
‫假设我们有三个类, 所以我们有类, 自行车, 摩托车和汽车｡
‫然后我们要确保所有这些类都继承自这个类载体｡
‫例如,
‫如果你想给我们的汽车添加自动驾驶功能, 而我们想让你创建其他类, 比如,
‫创建飞机之类的东西, 那么给基类车辆添加自动驾驶功能就没有意义了, 因为不是所有的子类都有这个功能｡
‫如果以一个叫I自驾的接口的形式添加会更方便｡
‫然后, 实现此接口的这些类可以提供实现它的逻辑｡
‫现在我们来讨论一下接口和抽象类之间的相似之处｡
‫接口和抽象类都可以实例化｡
‫这意味着我们不能从它们创建对象, 但它们都支持多态性,
‫这意味着我们可以将cat类型的对象存储在抽象类animal类型的变量中｡
‫同样的道理也适用于接口, 在接口中, 我们可以在i可枚举类型的变量中存储任何集合, 如列表或堆栈｡
‫现在, 我们来看看关键的区别｡
‫抽象类被设计为由实现或重写其方法的子类继承｡
‫换句话说, 抽象类要么部分实现, 要么根本没有实现｡
‫另一方面, 接口根本没有实现｡
‫那么抽象类就不能有与之相反的构造函数｡
‫抽象类可以有构造函数和字段以及方法定义, 而实现将由实现接口的类负责｡
‫另一方面, 抽象类可以包含方法､ 定义和字段, 并且由于接口没有任何构造函数,
‫正如我们提到的, 它们也不能有字段｡
‫所以现在类可以实现很多接口, 这是一种实现某种多继承的方法, 因为C-sharp是一种单继承语言,
‫默认情况下不允许这样做｡
‫所以一个类只能继承一个类的范围｡
‫因此, 如果一个类实现了一个接口, 它就必须实现它的所有成员, 如属性､
‫方法等等｡
‫另一方面, 当一个类扩展一个抽象类时, 它必须只实现其抽象成员｡
‫所以抽象类的非实现部分｡
‫让我们来看一个类比｡
‫想象一下, 我在欧盟的教程中看到一个尖锐的讲师, 除非他是某个主题的专家, 否则他什么都做不了,
‫或者她是某个主题的专家, 因为我们不能有抽象类的实例｡
‫因此, 教师需要成为一个主题的专家来教授它｡
‫于是, 讲师就成了升调专家, 现在他或她可以教C调｡
‫在某个时候, C店的教练不得不编辑他的视频｡
‫虽然并不是所有的教官都需要做同样的事情｡
‫因此, 我们实现了接口I视频编辑器, 因此, 不是所有的教师都需要能够编辑,
‫但实现此视频编辑器的教师必须这样做｡
‫好吧, 我会的
‫在设计商店类库时, 你应该选择继承而不是接口吗？
‫好吧, 如果你有一些你希望它的子类拥有的功能, 那么就使用抽象类｡
‫例如, 如果你有一组函数, 你希望子类把它们放在一个抽象类中｡
‫当派生类共享其核心属性和抽象类的行为（实际定义类的行为类型）时, 使用抽象类｡
‫如果您只想要一般契约的行为或功能, 请使用界面｡
‫与抽象类相比, 接口通常是松散的｡
‫在不断地为所有接口方法编写相同代码的情况下, 您不会希望使用接口｡
‫使用抽象类并定义每个方法一次｡
‫简单总结一下｡
‫当我们谈论抽象类时, 我们定义了对象类型的特征, 指定了对象是什么｡
‫当我们谈论接口并定义我们承诺提供的功能时, 我们谈论的是建立一个关于对象能做什么的契约｡
‫所以什么对象都是抽象类｡
‫对象可以做什么｡
‫一个接口｡
‫好吧, 我会的
‫因此, 我希望您喜欢并理解这篇摘要, 以及这两种不同类型方法的概述｡
‫现在让我们继续, 在接下来的课和剩下的课程中, 在不同的例子中使用这些概念｡