抽象类的精确使用

本文关键字:抽象类 | 更新日期: 2023-09-27 17:47:23

抽象类的确切用途是什么?在一个普通类中不可能做与抽象类相同的事情吗?

抽象类的精确使用

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

  • 接口:只有合同,没有实现,没有实例化
  • 抽象类:合约,一些实现,没有实例化
  • 类:合同、实现、实例化

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

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

抽象类是唯一一种允许您同时拥有包含实现的方法和不提供实现但需要继承类来提供实现的方法的类。

事实上,您可以添加没有实现的方法,这就是您不能实例化抽象类的原因:您只能实例化所有方法都有实现的东西。

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

同时,它们几乎可以做常规类所能做的所有其他事情:它们可以实现方法、包含字段&嵌套类型,派生自另一个类等。