实验9 继承与多态(抽象类和接口)_第1页
实验9 继承与多态(抽象类和接口)_第2页
实验9 继承与多态(抽象类和接口)_第3页
实验9 继承与多态(抽象类和接口)_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论