java概述课11 继承和多态.pptVIP

  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文档。上传文档
查看更多
java概述课11 继承和多态

* 转换对象 我们已经使用过转换运算符把一种基本类型变量转换为另一种基本类型。 转换也可以用来把一种类类型的对象转换为继承体系结构中的另一种类类型的对象。 在上一节中,语句: m(new Student()); 将对象new Student()复制给一个object类型的参数。这条语句等价于: Object o = new Student(); // 隐式转换 m(o); 所以, Object o = new Student()是合法的,它称为隐式转换 * 为什么需要转换? 使用下面的语句把对象引用o赋值给Student类型的变量: Student b = o;? 将会发生编译错误。 为什么语句 Object o = new Student() 可以运行,而语句 Student b = o; 不行呢?原因是Student对象总是Object的实例,但是,Object对象不一定是Student实例。即使可以看到o实际上是一个Student的对象,但是编译器还没有聪明到懂得这一点。为了告诉编译器o就是Student对象,就要使用显式转换。它的语法与基本类型的语法很相似,用圆括号把目标类型的参数括住,然后放到要转换的对象前面,如下所示: Student b = (Student)o; // 显式转换 * 从父类到子类的转换 当把一个父类的实例转换为它的子类变量时,必须使用转换标记号“(子类名)”进行显式转换,但有时不一定转换成功。 Apple x = (Apple)fruit; Orange x = (Orange)fruit; * instanceof 运算符 使用运算符instanceof确保对象是另一个对象的实例: Object myObject = new Circle(); ... // Some lines of code /** Perform casting if myObject is an instance of Circle */ if (myObject instanceof Circle) { System.out.println(The circle diameter is +((Circle)myObject).getDiameter()); ... } * 小窍门 为了更好的理解类型转换,可以认为它们类似于水果,苹果,橘子之间的关系。 其中水果类Fruit是苹果Apple和橘子类Orange的父类,苹果是水果,所以,总可以将Apple的实例安全的赋值给Fruit变量。 但是,水果不一定是苹果,所以必须进行显式转换才能将Fruit的实例赋值给Apple的变量。 * 示例:演示多态性与转换 程序创建两个几何对象: 一个圆和一个矩形,调用displayGeometricObject方法显示它们。 如果对象是一圆displayGeometricObject显示面积和周长。 如果对象是一个矩形,这个方法显示它的面积。 TestPolymorphismCasting Run * equals 方法 equals方法测试两个对象是否相等,Object类中equals方法的默认实现是: public boolean equals(Object obj) { return (this == obj); } 例如,equals方法在Circle类中重写。 public boolean equals(Object o) { if (o instanceof Circle) { return radius == ((Circle)o).radius; } else return false; } * 注意 = =比较运算符用于比较两个基本数据类型的值是否相等,或用于判断两个对象是否具有相同的引用。 如果想让equals方法能判断两个对象是否具有相同的内容,可以在定义这些对象的类时,覆盖Circle类中的equals方法。 运算符= =要比equals方法的功能强大些,因为= =运算符可以检查两个引用变量是否指向同一个对象。 * 矢量数组线性表ArrayList类 我们可以创建一个数组来存储对象。但是,数组的大小是固定的一次创建数组。Java提供了ArrayList类,可用于存储无限数量的对象。 * 编译警告 将产生编译警告 “unchecked operation”。可以忽略它,也可以使用第21章中介绍的泛型类型来消除。 TestArrayList Run * 自定义栈类 一个存储对象的栈类: MyStack * 修饰符protected 修饰符protected可应用于一类的数据和

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档