且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《OOD启思录》—第2章2.5节 抽象类

更新时间:2022-09-15 20:38:26

本节书摘来自异步社区《OOD启思录》一书中的第2章2.5节 抽象类,作者【美】Arthur J.Riel,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 抽象类
OOD启思录
除了我们已经讨论过的类,还有一种重要的抽象类型是我们需要探讨的。请思考下列问题:你曾经吃过水果吗?你曾经吃过开胃菜吗?你曾经吃过甜点吗?很多人对这3个问题的答案都是“是”。只要你对这3个问题中的任一个回答了“是”,请你接着思考下面的问题:水果尝起来味道如何?一份甜点有多少卡路里的热量?一份开胃菜价格是多少?

我可以说,没有人吃过“水果”。很多人吃过苹果、香蕉或者桔子,但没有人吃过一个3斤重的、红色的就叫做“水果”的东西。类似地,当你坐在餐厅中,服务员走来问你想吃些什么时,你回答“一份开胃菜、一份主菜还有一份甜点”,如果这时服务员就转身走了,你就有麻烦了,因为你喜欢虾,而不喜欢瓜(两种可能的开胃菜)。我们认可,没有“水果”、“开胃菜”或者“甜点”这样的对象,但是这些名词确实表达了有用的信息。如果我拿起一只闹钟对你说:“你觉得我的水果怎么样?”你会认为我疯了;而如果我拿起一只苹果问同样的问题,你就会觉得很正常。“水果”这个称谓表达了有用的信息,虽然你不能创建水果对象。事实上,它是一个类(概念),但不知道如何实例化它这种类型的对象。

不知道如何实例化对象的类称为抽象类(abstract class)。

知道如何实例化对象的类称为具体类(concrete class)。

请留心我们经常使用的术语“抽象数据类型”(ADT)。有的时候,它被用作“类”的同义词,并且不区分抽象类和具体类。

在面向对象范型中,抽象类的一个重要用途是帮助创建继承层次结构。它们表达了类别名称(见图2.10)。我们将在第5章讨论它们的用处。


《OOD启思录》—第2章2.5节 抽象类

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。