第7章习题答案.pdf_第1页
第7章习题答案.pdf_第2页
第7章习题答案.pdf_第3页
第7章习题答案.pdf_第4页
第7章习题答案.pdf_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

128 习题 1 类之间的关系除了聚合和关联外 还有继承 请用 UML 符号描述下述类之间的关 系 1 账户和存款帐户 2 学生和人 3 水果和橙子 4 教师和课程 5 班级和学生 答 1 继承关系 2 继承关系 3 继承关系 4 关联关系 5 聚合关系 2 简述 Object的意义 以及在判断相等时 子类需要如何重写超类的方法 答 Object 的类 它是所有 Java 类 JDK提供的 第三方类库 用户自定义的 的根类 一个类如果在声明时没有明确使用 extends 来标记自己派生于某个类 那么编译器将自动将 Object 类作为该类的超类 因此 所有的类最终都来自 Object 按照继承的特性 所有的 类都继承了 Object 类中的所有方法 Object 提供了一个对象基本的行为定义 例如 两个 对象的相同比较 equals 对象的字符串表示 toString 对象的复制 clone 等等 这 些没有用 final修饰的方法其行为一般都需要在子类中重新定义 在判断相等时 子类需要重写 Object类中的 equals方法 定义自身判断相等的原则 3 超类的构造方法是否可以被子类覆盖 重写 答 不会 子类并不继承超类的构造方法作为自己的构造方法 因为构造方法用来构 造类的对象 子类和父类并非同一类型 因此子类不能直接继承父类的构造方法 必须有 自己的构造方法 但是子类的构造方法并不会覆盖超类的构造方法 虽然不能继承超类的 构造方法 但子类可以通过 super 关键字来调用父类已定义的构造方法 4 试述 super的作用和使用规则 答 1 显式的调用父类的方法当从一个类继承时 子类和父类都有一个同名方法 也就 是子类覆盖了父类的方法 可是又想调用父类的方法 那么就要用 super 2 在构造方法中 与 this用法类似 利用 super可以调用父类的构造方法 5 什么是多态 简述 Java 中多态的实现机制 答 多态性是面向对象的核心特征之一 类的多态性提供类中成员设计的灵活性和方法 执行的多样性 在 JAVA中多态性表现如下 1 方法重载 重载表现为同一个类中方法的多态性 一个类生命多个重载方法就是为一种功能提供多 种实现 编译时 根据方法实际参数的数据类型 个数和次序 决定究竟应该执行重载方法中的 哪一个 2 子类重定义从父类继承来的成员 当子类从父类继承来的成员不适合子类时 子类不能删除它们 但可以重定义它们 子 类重定义父类成员 同名成员在父类与子类之间表现出多态性 父类对象引用父类成员 129 子类对象引用子类成员 不会产生冲突和混乱 子类可重定义父类的同名成员变量 称子类隐藏父类成员变量 子类也可以重定义父类 的同名成员方法 当子类方法的参数列表与父类方法参数列表完全相同时 称为子类方法 覆盖 override 父类方法 覆盖父类方法时 子类方法的访问权限不能小于父类方法的权 限 从编译运行的角度 在 JAVA中多态有两种形式 1 编译时多态性 对于多个同名方法 如果在编译时能够确定执行同名方法中的哪一个 则称为编译时多 态性 2 运行时多态性 如果在编译时不能确定 只能在运行时才能确定执行多个同名方法中的哪一个 则称 为运行时多态性 6 简述继承和实现接口的区别 答 简单来看 抽象类和接口都可以允许定义子类必须实现的方法 但实际上两者在 语义和用途上有着很大的差别 从语法规定来看它们的区别很明显 Java 支持一个类只能继承一个超类 但支持一个 类实现多个接口 一个接口可以继承多个接口 另外 接口中的方法仅是抽象方法的声 明 而抽象类中可以包含方法的具体实现 最重要的 抽象类本身是一类型系统中的超类 而接口仅是抽象方法的集合 因此抽 象类更多的用在描述问题的类的层次结构中 而接口更多的用在描述系统 或组件 所提供 的公共服务中 7 假定银行的一个存取款系统有两类客户 一类是现金用户 一类是信用卡用户 每种 客户都可以实现存 取 和查询余额和交易历史 信用卡用户还可以查询透支情况和信 用情况 要求 对于现金用户 每次取款操作只能在账户实际额度内操作 而信用卡用 户则根据其信用级别有一定的透支限额 请根据你的理解 运用所学的抽象 接口 继承等面向对象的概念建立模型 abstract class Account String name String aid double balance public Account String name String aid double balance 请把构造函数补充完整 this name name this aid aid this balance balance public void deposit double amount 请把存款方法补充完整 this balance amount public abstract void withdraw double amount 130 public double getBalance 请把查询余额方法补充完整 return balance public String toString return name aid balance class CashAccount extends Account String type 工资卡 借记卡 理财卡 public CashAccount String name String aid double balance String type super name aid balance this type type Override public void withdraw double amount TODO Auto generated method stub if balance 0 没透支 System out println name 没透支 你取了 amount balance amount else 透支 temp temp if temp 300 打印语句 停车 QQ当 maxSpeed 120 打印语句 停车 abstract class Car int maxSpeed public Car int maxSpeed this maxSpeed maxSpeed public abstract void stop class Ford extends Car public Ford int maxSpeed super maxSpeed TODO Auto generated constructor stub Override public void stop TODO Auto generated method stub if maxSpeed 300 System out println 停车 class QQ extends Car public QQ int maxSpeed super maxSpeed Override public void stop if maxSpeed 120 System out println 停车 11 下面程序运行后的输出是什么 class ThisClass public static void main String args Object o Object new ThisClass Object s new Object if o equals s System out println true 答 没有任何输出 因为 o equals s 的结果为 false 这是两个不同的对象 12 指出下面程序运行后的结果 class C1 static int j 0 public void method int a j class Test extends C1 public int method return j public void result 134 method j System out println j method public static void main String args new Test result 答 结果是 2 13 下面程序编译运行的结果是什么 interface Action int i 10 class Happy implements Action public static void main String args Happy h new Happy int j j Action i j Happy i j h i 答 j的值为 10 14 在 java util 包中有一接口 Comparator 提供了比较器的功能 请根据此接口定义的比 较方法 针对 Account 中的 id 和余额两个字段 完成两个比较器类的定义 并改写程 序 7 4 验证你的设计是否正确 一个实现了Comparable接口的Account类 按ID进行比较 import java util Arrays public class Account2 implements Comparable private String id 账户id 唯一性的标识 private String name 账户拥有人的姓名 private int balance 余额 public Account2 String id String name int balance this id id this name name this balance balance 取款的方法 返回本次取出的金额 如果为0 表示余额不足 public int withdraw int amount int result 0 if this balance amount this balance this balance amount result amount return result public int getBalance return this balance public void setBalance int balance this balance balance 135 public String getId return id toString方法覆盖了来自根类Object的方法 Override public String toString return Account id id name name balance balance compareTo方法覆盖了来自接口的方法 Override public int compareTo Object o int result 0 这里忽略了o的类型不是Account的情况 Account2 t Account2 o 利用字符串对象自身的compareTo 方法作为账户大小的比较 return pareTo t getId public static void main String args Account2 accounts new Account2 5 accounts 0 new Account2 001 王峰 1000 accounts 1 new Account2 002 张静 1500 accounts 2 new Account2 004 翟宇 660 accounts 3 new Account2 003 鲁宁 800 accounts 4 new Account2 005 刘新 1700 Arrays sort accounts for int i 0 i amount this balance this balance amount result amount return result public int getBalance return this balance 136 public void setBalance int balance this balance balance public String getId return id toString方法覆盖了来自根类Object的方法 Override public String toString return Account id id name name balance balance compareTo方法覆盖了来自接口的方法 Override public int compareTo Object o int result 0 这里忽略了o的类型不是Account的情况 Account3 t Account3 o 利用字符串对象自身的compareTo 方法作为账户大小的比较 return this balance t getBalance public static void main String args Account3 acc

温馨提示

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

评论

0/150

提交评论