第十讲 类型检查.pdfVIP

  • 2
  • 0
  • 约3.47万字
  • 约 26页
  • 2017-06-07 发布于湖北
  • 举报
【本教程REENT创意设计不享有版权】            说明 本教程来自互联网,由REENT创意设计教程制作团队收集整理,仅供成员学习交流用, 不得用于商业、出版业等行业,如有违反,由此带来的所有法律纠纷有违反者负责,与REENT 创意设计无关,REENT创意设计将不承担任何责任。 2011 年 10 月 05 日 第十章 类型检查 运行期类型识别(RTTI,run-time type identification)的概念初看起来非常简单:当你只有 一个指向对象的基类的引用时,RTTI 机制可以让你找出这个对象确切的类型。 对 RTTI 的需要,揭示了面向对象设计中许多有趣(并且复杂)的问题,同时也提出了如何 组织程序的问题。 本章将讨论 Java 是如何允许我们在运行期识别对象和类的信息。主要有两种方式:一种 是传统的 RTTI,它假定我们在编译期和运行期已经知道了所有的类型;另一种是“反射机 制(reflection)”,它允许我们在运行期获得类的信息。我们先讨论“传统”的 RTTI,再讨论 反射。 为什么需要RTTI 让我们来思考已经很熟悉了的一个使用了多态的类层次结构的例子。最一般化的类型是基类 Shape,而派生出的具体类有 Circle,Square 和 Triangle。 这是一个典型的类层次结构图,基类位于顶部,派生类向下扩展。面向对象编程基本的目的 是:你的代码只操纵对基类(这里是 Shape)的引用。这样,如果你要添加一个新类(比 如从 Shape 派生 Rhomboid)来扩展程序,就不会影响到原来的代码。在这个例子的 Shape 接口中动态绑定了 draw()方法,目的就是让客户端程序员使用一般化的 Shape 的引用来 调用 draw()。draw()在所有派生类里都会被重载,并且由于它是被动态绑定的,所以即 使是通过通用的 Shape 引用来调用,也能产生正确行为。这就是多态(polymorphism)。 因此,我们通常会创建一个特定的对象(Circle,Square,或者 Triangle),把它向上 转型成 Shape (忽略对象的特定类型),并在后面的程序中使用匿名(译注:即不知道具体 类型)的 Shape 引用。 简要复习一下多态和向上类型转换,并为上面的例子编码: //: c10:Shapes.java import com.bruceeckel.simpletest.*; class Shape { void draw() { System.out.println(this + .draw()); } } class Circle extends Shape { public String toString() { return Circle; } } class Square extends Shape { public String toString() { return Square; } } class Triangle extends Shape { public String toString() { return Triangle; } } public class Shapes { private static Test monitor = new Test(); public static void main(String[] args) { // Array of Object, n

文档评论(0)

1亿VIP精品文档

相关文档