我们 注意到 一类物件 可以 从它所属的大类中 继承 已有的措施,你 无法 将 这些继承而来的措施 去掉。但是 我们 可以重写 继承而来的措施,让 这些措施 可以完成 不同的任务。我们 来看看 下面这个程序 是 怎样 办到 这个的:
文件ClassA.h:
文件ClassA.m:
文件ClassB.h:
文件ClassB.m:
文件main.m:
通过ClassA.h 和 ClassA.m这两个文件 我 创建了 ClassA这类物件。每个ClassA类型的物件 都包含 一个整数类型的变量x。对 任何一个ClassA类型的物件 采取 initValue:这项措施 都可以 将 其所包含的变量x的值 设定为 100。通过ClassB.h 和 ClassB.m这两个文件 我 创建了 ClassB这类物件。在文件ClassB.h当中
这行语句 说明了 ClassB这类物件 属于 ClassA这大类物件中的一个小类,于是 和 ClassA类型的物件 一样,每个ClassB类型的物件 也都包含 一个整数类型的变量x。我们 同样可以 对 每个ClassB类型的物件 采取initValue:这项措施,将 其所包含的变量x的值 设定为 100。
但是 我 为ClassB这类物件 编写了 initValue这项措施,这项措施 是 将 实施对象的变量x的值 设定为 200。我为ClassB这类物件编写的措施initValue 和 为ClassA这类物件编写的措施initValue 拥有 相同的名称,但是 ClassB这类物件的措施initValue 会取代 ClassA这类物件的措施initValue。
在主程序main()当中 我 创建了 一个ClassB类型的物件bObject。然后 我 再 对 物件bObject 采取了 initValue这项措施 为 其所包含的变量x 设定 值,然后 再 对 其 采取了 printValue这项措施 将 其所包含的变量x的值 显示出来。我们 来看看 运行的结果:
通过 这个结果,我们 可以看出 bObject这个物件所包含的变量x的值 被设定为了 200,而 不是 100。这个结果 说明了 在bObject这个ClassB类型的物件身上 属于ClassB这类物件的措施initValue 取代了 属于ClassA这类物件的措施initValue。