网站大量收购独家精品文档,联系QQ:2885784924

实验9 继承与多态(抽象类和接口).doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验9 继承与多态(抽象类和接口)

实验9 继承与多态 一、实验目的 (1) 理解类的继承,掌握变量隐藏、方法覆盖的概念。 (2)理解引用类型的变量的赋值转换原则。 (3)理解多态概念,掌握方法的匹配调用原则; ? (4)理解抽象类的使用; (5)理解this和super的含义及使用。 (6)理解访问控制符的使用 二、 知识要点 1、继承的概念 通过类的继承,祖先类的所有成员均将成为子类拥有的“财富”。但是能否通过子类对象直接访问这些成员则取决于访问权限设置。Object类是所有类的祖先。 2、构造方法与继承关系 构造方法不存在继承关系,子类中是如何给父类继承的属性赋初值呢? 子类通过调用父类的构造方法给父类的属性赋值,在子类的构造方法的第1行可以通过super去调用父类的构造方法,如果没有super调用,则默认调用父类的无参构造方法。所以,在父类中编写构造方法通常均要提供无参构造方法。 3、对象引用变量赋值原则 可以将子类的对象引用赋值给父类引用变量,由于父类能操作访问属性和方法的子类已全部继承。但将父类引用变量的值赋给子类引用变量就受到限制,必须进行强制转换,编译总是认可强制转换,但运行程序时如果不能正确转换就会报错。 4、多态的两种表现形式 (1) 同一类中的方法多态(方法重载):同一类中允许多个同名方法,通过参数的数量、类型的差异进行区分。 (2) 子类对父类方法的重新定义(方法覆盖):方法名、返回值和参数形态完全一样。 (3) 方法调用的匹配原则。 首先查找有否有参数一致的方法,也就是精确匹配;如果没有,再检查实参是否能自动转换为形参类型,能转换也可以匹配调用,这种匹配称为转换匹配。 5、继承关系中对成员的访问(最近匹配原则) ??? 由于继承关系的存在,一个对象的属性和方法中有自己新定义的,也有从祖先类继承的。允许子类对父类定义的属性和方法重新定义,一个对象查找其属性和方法时按什么原则查找呢,实际也是“最近匹配原则”。 (1)在子类中访问属性和方法时将优先查找自己定义的属性和方法。如果该成员在本类存在,则使用本类的,否则,按照继承层次的顺序到其祖先类查找,如图8-1所示。 (2)this关键字特指本类的对象引用,使用this访问成员则首先在本类中查找,如果没有,则到父类逐层向上找。 (3)super特指访问父类的成员,使用super首先到直接父类查找匹配成员,如果未找到,再逐层向上到祖先类查找。   定义形式: abstract class 类名称 { ??? 成员变量; ??? 方法(){……}???? //定义一般方法 ??? abstract 方法();//定义抽象方法 }?? ?? 在抽象类中可以包含一般方法和抽象方法。 ?? 抽象类表示的是一个抽象概念,不能被实例化为对象。 ?? 继承抽象类的具体类必须将抽象类中抽象方法覆盖实现。 7、接口 定义形式: interface 名称 { ??? 静态常量; ??? 抽象方法()?? 接口中包含静态常量和抽象方法. ?? 类继承接口,实现接口中的所有方法. 三、上机练习 编写程序,在程序中定义一个抽象类Area、两个Area类的派生子类RectArea和RoundArea类,以及一个实现类ImpleArea类(main方法所在的类).程序的实现如下: 抽象类Area类中只包含一个抽象方法:double area()。 子类RoundArea类通过覆盖父类中的抽象方法area来求圆的面积,另一个类RectArea类通过覆盖父类中的抽象方法area求长方形的面积 圆的半径和长方形的边分别定义为子类RoundArea类和RectArea类的域,都为double类型。 ImpleArea类中接收键盘输入(Scanner),输入内容分别为长方形的边和圆的半径,求出长方形和圆的面积,并在屏幕上显示。 某公司有 3种不同的雇员,分为A,B,C3个级别。公司的总雇员数目因月份的不同可能发生变化。每个级别的月薪是不同的。编写一个程序计算公司一个月需要支付的全部薪水。 要求有一个abstract类,类名为Employee。Employee的子类有Aemployee, Bemployee, Cemployee. Employee类必须有一个abstract方法 注意:Aemployee, Bemployee, Cemployee声明的对象表示的是一个员工,而不是一类员工。成员变量没有要求的,不能乱加。 public abstract double earnings();//返回级别工资 子类必须重写父类的earnings方法(必须的,继承抽象类必须实现抽象方法),给出各自的月薪水的具体数额。 (数据随便,自己编好了) 编写一个Company类,该类用Employee数组作为成员,Employee数

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档