10检测类型.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10检测类型.PDF

Thinking in Java 3rd Edition 10: 检测类型检测类型 检测类型检测类型 初看起来“运行时类型识别(run-time type identification,缩写为 RTTI)”的想法很简单:要让你在只持有这个对象的基类的 reference 的 情况下,找出它的确切的类型。 但是,这种对“RTTI 的强烈需求”揭示了许多 OO 设计中会碰到的有趣 (同时也很令人困惑)的问题,并且引出了“该如何组织程序结构”这一根 本性的问题。 本章要讲解 Java 所提供的,让你在运行时发现对象和类的信息的方法。 它有两种形式:一种是假设你在编译和运行时都完全知道类型的具体信息 的“传统的”RTTI,另一种是允许你只依靠运行时信息发掘类型信息的 “reflection”机制。我们先讲“传统的”RTTI,再讨论 reflection。 为什么会需要为什么会需要 RTTI 为什么会需要为什么会需要 先想一想我们现在已经很熟悉的那个多态性的例子。通用的基类 Shape 派生出具体的 Circle,Square 和 Triangle 类: 这是一个典型的类系(class hierarchy)结构图,基类在最上面,派生类 在下面。OOP 的目的就是要让你用基类的 reference(这里就是 Shape) 来写程序,因此如果你往程序里面加了一个新的类(比如 Shape 又派生 了一个 Rhomboid),绝大多数的代码根本不会受到影响。在这个例子 里面,Shape 接口动态绑定的是 draw( ),于是客户程序员能够通过 通用的 Shape reference 来调用 draw( )。所有派生类都会覆写 draw( ),而且由于这个方法是动态绑定的,因此即便是通过通用的 Shape reference 来进行的调用,也能得到正确的行为。这就是多态 性。 由此,编程时一般会先创建一个具体的对象(Circle,Square,或 Triangle),再把它上传到 Shape(这样就把对象的具体类型给忘了), 然后在余下来的程序里面使用那个匿名的 Shape reference。 第 1 页 共 17 页 /shhgs/tij.html email:shhgs@ Chapter 10: Detecting Types 作为多态性的简要回顾,我们再用程序来描述一遍上面这个例子: //: 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[] ar

文档评论(0)

tangtianbao1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档