18

抽象类的确切用途是什么?普通类不能像抽象类那样做同样的事情吗?

4

4 回答 4

24

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

  • 接口:只有契约,没有实现,没有实例化
  • 抽象类:契约,一些实现,没有实例化
  • 类:契约、实现、实例化
于 2008-10-27T05:21:44.373 回答
19

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

于 2008-10-27T05:19:00.587 回答
5

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

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

允许您在没有实现的情况下添加方法的事实是您无法实例化抽象类的原因:您只能实例化具有其所有方法的实现的东西。

于 2008-10-27T11:43:34.257 回答
1

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

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

于 2008-10-27T05:36:19.117 回答