《Java面向对象程序设计(第2版)》课件-06 多态性.ppt

《Java面向对象程序设计(第2版)》课件-06 多态性.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 多 态 性 学习目标 理解多态性的概念 理解继承层次结构中对象间的关系 区分抽象类与具体类 抽象类和抽象方法的声明和使用 接口的声明和实现 final类和final方法 嵌套类的概念和使用 基本数据类型的包装类 6.1 多态性概念和实例 多态性(Polymorphism) 在超类中定义的属性或行为,被子类继承之后,可以具有不同的数据类型或表现出不同的行为。 这使得同一个属性或行为在超类及其各个子类中具有不同的语义。 6.1 多态性概念和实例 定义Shape s; s.draw(); //s调用draw()方法,s指向对象不同会画出不同的图形(圆或矩形或三角形) 多态性也是泛指在程序中同一个符号在不同的情况下具有不同解释的现象。 6.1 多态性概念和实例(续) 实现多态性的条件: 继承 抽象方法 引用 6.2 继承层次结构中对象间的关系 继承层次结构中的子类对象可以视为超类的对象,这样就可以将子类对象赋给超类变量。 然而,超类对象并不是其任何子类的对象,即不能将超类对象赋给子类引用。 6.2 继承层次结构中对象间的关系(续) 例如: Point3 point = new Point3( 30, 50 ); Circle4 circle = new Circle4( 120, 89, 2.7 ); Point3 pointRef = circle; (允许) Point3 pointRef=new Circle4(120,12,0) (允许) pointRef.toString(); //call Circle4.toString(); pointRef=point; pointRef.toString() //call Point.toString(); Circle circle= point; // 不允许,编译出错 6.2 继承层次结构中对象间的关系 (续) 强制类型转换 下列语句组是将point对象强制转换成Circle对象,circle. getX() 语句是正确的,而circle. getRadius()语句在运行时会产生错误。因为circle引用指向的point对象根本无getRadius方法。 Point3 point = new Point3( 30, 50 ); Circle circle=(Circle) point; circle. getX() ; circle. getRadius() ; //run-time error 例6-1中的例子举例说明了继承层次结构中对象间的关系。 例6-2 超类对象的引用赋给一个子类类型的变量 //HierarchyRelationshipTest2.java public class HierarchyRelationshipTest2 { public static void main( String[] args ) { Point3 point = new Point3( 30, 50 ); Circle3 circle; circle = point; //超类对象的引用赋给一个子类类型的变量,是不允许的。 } } 6.3 抽象类和抽象方法 6.3.1 抽象类和具体类的概念 6.3.2 抽象方法的声明 6.3.3 抽象类的声明 6.3.4 抽象类程序设计的举例 6.3.1 抽象类和具体类的概念 抽象类:每个抽象类中至少包含一个抽象方法。 抽象类只能作为继承层次结构中的超类,所以这些类称为抽象超类。不能实例化抽象类的对象。 抽象类的目的是提供一个合适的超类,以派生其他类。 具体类:用于实例化对象的类。这种类实现它们声明的所有方法。 抽象超类是一般类,它们仅仅指定子类的共同点,并不创建出真实的对象。 例如,如果我们要“绘制形状”,那我们将绘制什么形状呢?具体类为实例化对象提供了合理的细节。 6.3.2 抽象方法的声明 用关键字abstract声明抽象方法: public abstract void draw(); 抽象方法并不提供实现。包含抽象方法的类必须声明为抽象类。 抽象超类的所有具体子类都必须为超类的抽象方法提供具体实现。 6.3.3 抽象类的声明 使用关键字abstract声明抽象类。形如: public abstract class Shape {….} 抽象类通常包含一个或多个抽象方法 (静态方法不能为抽象方法)。 抽象超类不能实例化。但可以使用抽象超类来声明引用变量,用以保存抽象类所派生的任何具体类的对象。程序通常使用这种变量来多态地操作子类对象。 6.3.4 抽象类程序设

您可能关注的文档

文档评论(0)

考试教学资料 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档