既然 id类型的变量 可以存储 任何类型的物件,那么 为什么 不用 id类型的变量 来存储 所有类型的物件呢?有 几个原因 使 你 不愿意 这样做。
首先,当你 创建 某一类型的变量 来存储 某个特定类型的物件时,你用的 是 静态类型。静态的意思 就是 这个类型的变量 从头到尾 只存储 同一个类型的物件。于是 在这个变量当中 物件的类型 是 提前确定好了的 或者 是 静态的。当你 使用 静态类型时,编译器 会尽其所能 保证 某个类型的变量 从头到尾 只存储 这个类型的物件。同时 编译器 也会确保 对某个物件采取的措施 的确 适用于 这个类型的物件,如果 对某个物件采取的措施 不适用于 这类物件,编译器 就会发出 错误警告。
如果 用 id类型的变量 存储 某个物件,那么 编译器 就不会检查 对这个物件所采取的措施 是否适用于 这类物件。
然而,如果 能 在程序运行的时候 检查 对某个物件所采取的措施 是否适用于 这类物件的话,那 为什么 还要 使用 静态类型呢?之所以 要 使用 静态类型,是因为 与其 在程序运行的时候 发生 错误,还不如 在编译的时候 就发现 错误 并且 予以修正。作为 一名开发者,你 不见得 是 最终的用户。如果 全部 使用 id类型的话,最终 发现 某些措施 无法适用于 某类物件的人 就是 可怜 而且 无辜的用户了。
使用 静态类型的另外一个原因 就是 这样 可以使 你的程序 更加容易 被人读懂(也 包括 开发者自己)。对比一下 下面两行语句:
与
你 认为 哪行语句 使 变量fractionOne的作用 更加 清楚?静态的类型 和 具有意义的变量名称 合在一起 会使 你的程序 变得 不言自明。