抽象类的确切用途是什么?

18

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


请查看:https://dev59.com/onVD5IYBdhLWcg3wL4mM - John Sheehan
看一下模板方法设计模式,我认为抽象类在那里是不可替代的。 - rafek
4个回答

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

因为“contract”意味着该方法的声明,也就是“抽象”的意思。编译器会强制将其转换为抽象类。这就是为什么在普通类中如何使用“contract”的问题。如果我的逻辑有误,请纠正我。 - devsda
我不明白你所说的“contract”是什么意思。 - ThomasRones

19

抽象类用于当你有一些基本功能需要子类继承,但是实例化基类并没有意义。例如,如果你有一个形状(Shape)基类,你可以在其中包含一些内置的实现,这些实现可以被子类使用,同时还有一些接口方法需要子类实现。但是,创建形状(Shape)对象可能没有意义,抽象类提供了这个功能。另一个抽象类使用的绝佳示例是抽象工厂模式


5

普通的类需要你提供所有方法的实现。

接口要求你不为所有方法提供任何实现。

抽象类是唯一一种既允许你拥有包含实现的方法,又允许你拥有不提供实现但需要继承类提供实现的方法的类。

由于你可以添加没有实现的方法,这就是为什么你不能实例化一个抽象类的原因:你只能实例化所有方法都有实现的东西。


1
与常规类不同,抽象类可以包含抽象方法。它们的作用很像接口成员。
同时,它们可以做常规类所能做的任何事情:实现方法,包含字段和嵌套类型,派生自另一个类等等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接