继承这种思想 常常 用来对 一类物件 进行扩展。现在 我 在objective-c当中 创建 一类叫Rectangle的物件 来代表 长方形这类事物,就像 下面这样:
文件Rectangle.h:
文件Rectangle.m:
通过Rectangle.h 和 Rectangle.m这两个文件 我 创建了 Rectangle这类物件。从这两个文件当中,我们 可以看出 任何一个Rectangle类型的物件 都包含 width 和 height这两个变量 来表示 这个Rectangle类型的物件所代表的长方形的宽 和 高。同时 我们 可以 对 任何一个Rectangle类型的物件 采取 setWidth:andHeight:、area:、perimeter:这三项措施,从而 达到 对 其所代表的长方形 设定 宽 和 高、计算 面积 和 计算 周长的目的。
假设 我 要使用 正方形,我 本来可以创建 一类全新的物件,叫做Square 来代表正方形。但是 仔细 想想,我 发现 正方形 刚好 是 宽 和 高 都一样的长方形。于是 我 可以创建 一类叫做Square的物件,并且 让 Square这类物件 充当 Rectangle这一大类物件中的一小类,就像 下面这样:
文件Square.h:
文件Square.m:
通过Square.h 和 Square.m这两个文件,我 创建了 Square这类物件。
这两行语句 表明了 Square这类物件 属于 Rectangle这大类物件中的一个小类。因此 任何一个Square类型的物件 都 像Rectangle类型的物件那样 拥有 Width 和 Height两个变量;同 Rectangle类型的物件 一样,我们 可以 对 任何一个Square类型的物件 采取 area: 和 perimeter:两项措施。由于 setWidth:andHeight:这项措施 会 分别 设定 正方形 或 长方形的宽 和 高,所以 我们 不对 Square类型的物件 采取 这项措施。不过 setSide:这项措施 可以将 Square类型物件的宽 和 高 设定为 相同的值。
下面 通过一个实际的程序 来验证 Square这类物件 是否继承了 Rectangle这类物件的属性:
文件main.m:
在这个程序当中 我 首先 创建了 一个Square类型的物件mySquare 来代表 一个正方形。然后 对 mySquare这个物件 采取了 setSide:这项措施,并且 用 5 来充当 参数,以此 将 mySquare这个物件所代表的正方形的周长 设定为 5。接着 我 又 对mySquare这个物件 采取了 side:、area: 和 perimeter:这三项措施,将 mySquare这个物件所代表的正方形的边长、面积 和 周长 分别 计算出来,再 通过调用 NSLog()函数 显示出来。其中 area: 和 perimeter:这两项措施 是 从Rectangle这大类物件中 继承到的。运行 这个程序后,得到了 正确的结果:
这 表明 mySquare这类物件 继承了 Rectangle这类物件的属性。像 这样 创建 Square这类物件的方法 就是 对 已有的类型的物件 进行扩展 来满足 自己的需要,这种方法 在今后 会 常常 用到。