8.5 抽象类

除了术语外还有什么更好的办法总结本章内容呢?这里介绍这个概念,是因为它与继承的概念直接相关。

有时,创建类只是使创建子类更容易。因此,这些类名为抽象(abstract)类,或等价地称作抽象超类(abstract superclasses)。方法和实例变量定义在该类中,但不期望任何人从该类创建实例。例如,考虑根对象Object。能想出从该类定义对象的任何用途吗?

Foundation框架将在第二部分讲述,它包含几个所谓的抽象类。举一个例子,Foundation的NSNumber类是为了将数字作为对象处理而创建的抽象类。整数与浮点数字通常有不同的内存需求。每种数字类型都有单独的NSNumber子类。因为这些子类与它们的抽象超类不同,这些子类是具体存在的,它们名为具体子类。每个具体子类属于NSNumber类,总起来名为簇(cluster)。向NSNumber类发送消息来创建新的整数对象时,使用合适的子类为整数对象分配必需的空间,并正确地设定其值。这些子类实际上是私有的。你自己无法直接访问这些子类,只能通过抽象的超类间接访问。抽象超类提供了处理所有数字对象类型的公共接口,你就无须了解存储在数字对象中的数字类型及如何设置与检索该值。

的确,这个讨论看起来可能有些“抽象”(报歉!),不用担心,这里只需掌握基础的概念就可以了。