确切使用Abstract类

Abstract类的确切用法是什么? 在普通的类中是不可能做同样的事情,因为它是一个抽象类?

使用抽象类提供一些具体实现但不允许实例化。 如果它不能独立存在,你总是可以实例化一个没有意义的普通类。 同时,如果在所有实现类中都有相同的具体实现,那么接口可能是不够的。 抽象类就足够了。

  • 接口:仅合同,没有实现,没有实例化
  • 抽象类:契约,一些实现,没有实例化
  • 类:合同,实施,实例化

如果您有一些希望子类inheritance的基本function,则使用抽象类,但实例化基类没有意义。 例如,如果您有类似Shape基类的东西,那么您可以使用一些可以由子类使用的内置实现以及您希望子类实现的接口方法。 但是,创建Shape对象可能没有意义。 抽象类为您提供此function。 抽象类使用的另一个很好的例子是抽象工厂模式 。

常规类要求您提供所有方法的实现。
接口要求您不要为所有方法提供任何实现。

抽象类是唯一允许您拥有包含实现的方法的类,并且具有不提供实现的方法,但需要inheritance类来提供实现。

您可以在没有实现的情况下添加方法,这是您无法实例化抽象类的原因:您只能实例化具有其所有方法实现的内容。

与常规类不同, abstract类可以包含abstract方法。 它们的行为很像界面成员。

同时,他们可以做普通类可以做的其他事情:他们可以实现方法,包含字段和嵌套类型,从另一个类派生,等等。