面向对象编程(二)

上传人:sha****en 文档编号:23689596 上传时间:2021-06-10 格式:PPT 页数:45 大小:1.14MB
收藏 版权申诉 举报 下载
面向对象编程(二)_第1页
第1页 / 共45页
面向对象编程(二)_第2页
第2页 / 共45页
面向对象编程(二)_第3页
第3页 / 共45页
资源描述:

《面向对象编程(二)》由会员分享,可在线阅读,更多相关《面向对象编程(二)(45页珍藏版)》请在装配图网上搜索。

1、第 4章面 向 对 象 编 程继 承 和 方 法 2 回 顾 :创 建 一 个 类 Circle, 其 中 有 : 一 个 成 员 变 量 r( 半 径 ) 一 个 方 法 clength, 能 求 圆 周 长 一 个 方 法 carea, 能 求 圆 面 积 并 建 立 该 类 的 一 个 对 象 : 一 个 半 径 为 5的圆 , 并 输 出 该 圆 的 周 长 和 面 积 。 3 收 到 作 业 中 解 决 方 法 :l public class Circle l int r=5;l double PI=3.14;l public void getClength()l System.ou

2、t.println(“圆 的 面 积 是 :+PI*r*r);l l public void getArea()l System.out.println(圆 的 周 长 是 :+2*PI*r);l 4 l public static void main(String args) l Circle cc=new Circle();l cc.getClength();l cc.getArea();l l 5 继 承 6 生 活 中 的 继 承l 生 活 中 , 继 承 的 例 子 随 处 可 见动 物食 草 动 物 食 肉 动 物谁 是 父 类 ?谁 是 子 类 ?能 说 出 继 承 的 特 点

3、吗 ? 继 承 需 要 符 合 的 关 系 : 父 类 更 通 用 、 子 类 更 具 体 7 生 活 中 的 继 承l 子 类 具 有 父 类 的 一 般 特 性 ( 包 括 属 性 和 行为 ) , 以 及 自 身 特 殊 的 特 性巴 士 是 汽 车 吗 ?卡 车 是 汽 车 吗 ?出 租 车 是 汽 车 吗 ? 最 大 载 客 数 量报 站 引 擎 数 量外 观 颜 色刹 车加 速汽 车最 大 载 重 量卸 货 所 属 公 司最 大 载 客 数 量打 发 票 属 性行 为请 问 : 出 租 车包 含 哪 些 属 性和 行 为 呢 ? 8 为 什 么 需 要 继 承 ?l 开 发 教 师

4、 类 , 其 中 教 师 分 为 Java教 师 以及 .NET教 师 , 各 自 的 要 求 如 下 :Java教 师属 性 : 姓 名 、 所 属 教 研 室方 法 : 授 课 ( 步 骤 : 打 开 Eclipse、 实 施 理 论 课 授 课 ) 、自 我 介 绍.NET教 师属 性 : 姓 名 、 所 属 教 研 室方 法 : 授 课 ( 步 骤 : 打 开 Visual studio 2005、 实 施 理论 课 授 课 ) 、 自 我 介 绍 9 l 请 问 : 以 下 这 个 解 决 方 案 中 存 在 着 什 么 问题 ?为 什 么 需 要 继 承 ?public class

5、 DotNetTeacher private String name; / 教 师 姓 名private String department; / 教 研 室public DotNetTeacher(String myName, String myDepat) name = myName; department = myDepart;public void giveLession()System.out.println(启 动 Visual Studio 2005);System.out.println(知 识 点 讲 解 ); System.out.println(总 结 提 问 ); pu

6、blic void introduction() System.out.println(大 家 好 ! 我 是 +department+ 的 + name + .); public class JavaTeacher private String name; / 教 师 姓 名private String department; / 教 研 室public JavaTeacher(String myName, String myDepart) name = myName; department= myDepart;public void giveLession()System.out.prin

7、tln(启 动 Eclipse);System.out.println(知 识 点 讲 解 );System.out.println(总 结 提 问 );public void introduction() System.out.println(大 家 好 ! 我 是 + department + 的 + name + .); 代 码 存 在 重 复 , 违 背 了 “ write once, only once”的 原 则 10 l 如 何 改 进 ? 有 没 有 可 能 建 立 继 承 关 系 , 让子 类 自 动 继 承 父 类 的 属 性 和 方 法 ?Java教 师 是 教 师 吗

8、?.NET教 师 是 教 师 吗 ? public class Teacher private String name; / 教 师 姓 名private String department; / 教 研 室public Teacher(String myName, String myDepart) name = myName;department = myDepart;public void giveLesson()System.out.println(知 识 点 讲 解 );System.out.println(总 结 提 问 ); public void introduction() S

9、ystem.out.println(大 家 好 ! 我 是“ + department + 的 + name + 。 ); 现 在 , 所 有 子 类 中 相 同 的 代 码都 抽 取 到 父 类 中 了 属性行为姓 名教 研 室授 课自 我 介 绍教 师Java教 师 .NET教 师 11 为 什 么 需 要 继 承 4-4public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart);public void giveLe

10、sson()System.out.println(启 动 Eclipse);super.giveLesson();public class DotNetTeacher2 extends Teacher public DotNetTeacher2(String myName, String myDepart) super(myName, myDepart);public void giveLesson()System.out.println(启 动 Visual Studio .NET);super.giveLesson(); 使 用 继 承 , 可 以 有 效 实 现 代 码 复 用 子 类

11、自 动 继 承 父 类 的 属 性和 方 法 , 子 类 中 不 再 存 在重 复 代 码 12 如 何 实 现 继 承 ?l 在 Java语 言 中 , 用 extends关 键 字 来 表 示一 个 类 继 承 了 另 一 个 类 , 例 如 :public class JavaTeacher2 extends AccpTeacher /其 余 代 码 省 略l 在 父 类 中 只 定 义 一 些 通 用 的 属 性 与 方 法 ,例 如 :public class Teacher private String name; / 教 师 姓 名private String departmen

12、t; / 所 在 教 研 室 public Teacher(String myName, String myDepart) /初 始 化 属 性 值public void giveLesson() /授 课 方 法 的 具 体 实 现 public void introduction() /自 我 介 绍 方 法 的 具 体 实 现 13 如 何 实 现 继 承l 子 类 自 动 继 承 父 类 的 属 性 和 方 法 , 子 类 中可 以 定 义 特 定 的 属 性 和 方 法public class Teacher String name; / 教 师 姓 名String departme

13、nt;/ 所 在 教 研 室public Teacher (String myName, String myDepart) /初 始 化 属 性 值public void giveLesson() /授 课 方 法 的 具 体 实 现 public void introduction() /自 我 介 绍 方 法 的 具 体 实 现 public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDepart) super(myName, myDepart);public void gi

14、veLesson()System.out.println(启 动 Eclipse);super.giveLesson(); 由 于 giveLesson()方 法 与父 类 的 实 现 有 所 不 同 , 因此 重 写 了 该 方 法 方 法 重 写 : 子 类 和 父 类 的 方 法 具 有 相 同 的 名 称 、 参 数 列 表 、 返 回 类 型 父 类 中 的 属 性 和 方 法 可以 被 子 类 继 承 14 public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String myDe

15、part) super(myName, myDepart);如 何 实 现 继 承 ?l 子 类 的 构 造 方 法 中 , 通 过 super关 键 字 调 用父 类 的 构 造 方 法方 法 重 写 后 , 通 过 super关 键 字 调 用 父 类的 方 法public class JavaTeacher2 extendsTeacher public void giveLesson()System.out.println(启 动 Eclipse);super.giveLesson(); 通 过 调 用 父 类 的 构 造 方 法 ,完 成 对 属 性 值 的 初 始 化 15 一 切

16、类 的 “ 祖 先 ” Objectl 在 Java 中 , 所 有 的 Java类 都 直 接 或 间 接 地继 承 了 java.lang.Object类public class MyObject / public class MyObect extends Object / 在 Eclipse中 调 用 MyObject对 象 的 成 员 , 会 自 动 弹 出 继承 自 Object的 所 有 方 法 16 小 结 1l 请 编 码 实 现 动 物 世 界 的 继 承 关 系 :动 物 ( Animal) 具 有 行 为 : 吃 ( eat) 、睡 觉 ( sleep)动 物 包 括

17、: 兔 子 ( Rabbit) , 老 虎 ( Tiger)这 些 动 物 吃 的 行 为 各 不 相 同 ( 兔 子 吃 草 ,老 虎 吃 肉 ) ; 但 睡 觉 的 行 为 是 一 致 的 。l 请 通 过 继 承 实 现 以 上 需 求 , 并 编 写 测试 类 AnimalTest进 行 测 试 。 17 18 为 什 么 需 要 多 态 5-1l 在 教 师 类 的 基 础 上 , 开 发 一 个 类 代 表 总部 , 负 责 对 各 教 师 进 行 评 估 , 评 估 内 容包 括 : 1、 教 师 的 自 我 介 绍 2、 教 师 的 授 课 19 为 什 么 需 要 多 态 5

18、-2public class HQ1 public void judge(JavaTeacher2 t)t.introduction();t.giveLesson();public void judge(DotNetTeacher2 t)t.introduction();t.giveLesson();public static void main(String args) HQ1 hq = new HQ1();hq.judge(new AccpJavaTeacher2(李 明 ,北 京 中 心 “ );hq.judge(new AccpDotNetTeacher2(张 明 ,天 津 中 心 “

19、 ); l 第 一 种 解 决 方 案 大 家 好 ! 我 是 北 京 中 心 的 李 明 .启 动 Eclipse知 识 点 讲 解总 结 提 问大 家 好 ! 我 是 天 津 中 心 的 张 明 .启 动 Visual Studio 2005知 识 点 讲 解总 结 提 问 控 制 台 输 出 20 为 什 么 需 要 多 态 5-3l 现 在 , 改 进 教 师 类 , 增 加 一 种 新 类 型 :DBTeacher, 该 类 型 的 教 师 专 门 负 责 教 授 数据 库 , 要 求 如 下 :属 性 : 姓 名 、 所 属 中 心方 法 : 授 课 ( 启 动 Sql Serve

20、r、 实 施 理 论 课 授课 ) 、 自 我 介 绍l 同 时 , 总 部 也 负 责 对 这 类 教 师 进 行 评 估 21 为 什 么 需 要 多 态 5-4l 如 果 在 第 一 种 解 决 方 案 的 基 础 上 去 解 决 ,我 们 需 要 如 下 两 个 步 骤 :建 立 DBTeacher类修 改 总 部 类 , 增 加 方 法 : judge(DBTeacher t)每 增 加 一 种 新 的 教 师 类 型 , 都 要 修 改 总 部 类 , 增 加 相 应 的 judge(评 估 )方 法 , 代 码 的 可 扩 展 性 及 可 维 护 性 极 差 能 找 到 这 个

21、解 决 方 案 的 弊 端 吗 ? 22 为 什 么 需 要 多 态 5-5l 第 二 种 解 决 方 案 使 用 多 态public class HQ3 public void judge(Teacher t)t.introduction();t.giveLesson();public static void main(String args) HQ3 hq = new HQ3();hq.judge(new AccpJavaTeacher2(李 明 ,北 京 中 心 “ );hq.judge(new AccpDotNetTeacher2(张 明 ,天 津 中 心 );hq.judge(new

22、 AccpDBTeacher(“李 岚 ,北 京 中 心 “ ); 可 以 接 收 子 类 类 型根 据 实 际 创 建 的 对 象类 型 调 用 相 应 方 法 大 家 好 ! 我 是 软 件 教 研 室 的 李 明 .启 动 Eclipse知 识 点 讲 解总 结 提 问大 家 好 ! 我 是 软 件 教 研 室 的 张 明 .启 动 Visual Studio 2005知 识 点 讲 解总 结 提 问大 家 好 ! 我 是 软 件 教 研 室 的 李 岚 .启 动 Sql Server知 识 点 讲 解总 结 提 问控 制 台 输 出使 用 多 态 之 后 , 当 需 要 增 加 新 的

23、 子 类 类 型时 , 无 需 更 改 总 部 类 , 程 序 的 可 扩 展 性 及可 维 护 性 增 强 23 简 单 来 说 , 多 态 是 具 有 表 现 多 种 形 态 的 能力 的 特 征 同 一 个 实 现 接 口 , 使 用 不 同 的 实 例 而 执 行不 同 操 作什 么 是 多 态 打 印 效 果 : 彩 色 打 印 效 果 : 黑 白打 印 打 印 彩 色 打 印 机 打 印 机 黑 白 打 印 机 24 如 何 实 现 多 态1、 子 类 重 写 父 类 的 方 法2、 编 写 方 法 时 , 使 用 父 类 定 义 的 方 法3、 运 行 时 , 根 据 实 际 创

24、 建 的 对 象 类 型 动 态 决 定 使 用哪 个 方 法public class DBTeacher extends Teacher public void giveLesson() System.out.println(启 动 SqlServer); super.giveLesson(); 1public class Teacher public void giveLesson() System.out.println(知 识 点 讲 解 ); System.out.println(总 结 提 问 ); public class HQ3 public void judge(Teache

25、r t) t.giveLesson(); 2public class Test public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new DBTeacher(); 3 25 小 结 2l 请 编 码 实 现 如 下 需 求 :乐 器 ( Instrument) 分 为 : 钢 琴 (Piano)、 小提 琴 (Violin)各 种 乐 器 的 弹 奏 ( play ) 方 法 各 不 相 同 。l 编 写 一 个 测 试 类 InstrumentTest, 要 求 :编 写 方 法 testPlay, 对 各 种

26、 乐 器 进 行 弹 奏 测 试 。要 依 据 乐 器 的 不 同 , 进 行 相 应 的 弹 奏 。在 main方 法 中 进 行 测 试 26 总 结 2-1class Base public String name;public Base()name = Base;public Base(String pName)name = pName;public void method()System.out.println(name); class Child extends Basepublic Child()super(Child1);name=Child2;给 定 如 下 Java代 码

27、, 编 译 运 行 后 , 输 出 结果 是 什 么 ? public class Sample public static void main(String args) Child c = new Child(); c.method(); Child2 控 制 台 输 出1 23 27 总 结 2-2给 定 如 下 Java代 码 , 编 译 运 行 后 , 输 出结 果 是 什 么 ?public class Teacher public void giveLesson()System.out.println(知 识 点 讲 解 ); public class DBTeacher exte

28、nds Teacher public void giveLesson()System.out.println(启 动 SqlServer); 1 2public class Test public static void main(String args) Teacher t = new DBTeacher ();t.giveLesson(); 控 制 台 输 出 启 动 SqlServer 28 生 活 中 的 方 法 重 载类 方 法 方 法 参 数 方 法 实 现司 机 轿 车 巴 士 火 车 驾 驶 启 动 、 行 驶 、 等 待 乘 客 上 车 、 启 动 、行 驶 、 到 站 停

29、车 、 正 点 发 车 、 行 驶 、到 站 停 车 、 如 果 用 代 码 实 现 , 我 们 需 要 三 个 方 法 , 这 些 方 法 的 方 法 名 称相 同 , 参 数 类 型 不 同 29 方 法 重 载 的 代 码 示 例 1l 方 法 重 载 并 不 陌 生l java.io.PrintStream类 的 println方 法 能 够 打印 数 据 并 换 行 , 根 据 数 据 类 型 的 不 同 , 有多 种 实 现 方 式 public class Test public static void main(String args) int i = 0;char c = z

30、;String str = hello;System.out.println(i);System.out.println(c);System.out.println(str); PrintStreamprintln(int)println(char)println(String)方 法 名 相 同 , 参 数 类 型 不 同 调 用 不 同 的 println方 法方法重载 30 方 法 重 载 的 代 码 示 例 2java.lang.Math类 的 max()方 法 能 够 从 两 个数 字 中 取 出 最 大 值 , 它 有 多 种 实 现 方 式运 行 时 , Java虚 拟 机 先

31、判 断 给 定 参 数 的 类型 , 然 后 决 定 到 底 执 行 哪 个 max()方 法Mathmax(int a,int b)max(float a,float b)max(long a,long b) max(double a,double b) public class Test public static void main(String args) Math.max(1,2);Math.max(1.0F,2.F);Math.max(1.0,2);方法重载 31 构 造 方 法 重 载 2-1l 构 造 方 法 重 载 是 方 法 重 载 的 典 型 示 例public clas

32、s Teacher7 private String name; / 教 师 姓 名private String department = “软 件 教 研 室 ” ; / 所 在 教 研 室Public Teacher7(String name) this.name = name; /设 定 教 师 姓 名public Teacher7(String name, String department) this.name = name; /设 定 教 师 姓 名this.department = department; /设 定 教 师 教 研 室public String introducti

33、on() return 大 家 好 ! 我 是 + department + 的 + name ;构造方法重载 32 构 造 方 法 重 载 2-2l 通 过 调 用 不 同 的 构 造 方 法 来 表 达 对 象 的 多种 初 始 化 行 为l 例 如 :默 认 情 况 下 , 教 师 来 自 北 京 中 心 , 初 始 化 时 , 只需 提 供 教 师 姓 名有 时 , 需 要 提 供 所 在 中 心 名 称 及 教 师 姓 名public class AccpTeacher7Test public static void main(String args) Teacher7 teache

34、r1 = new Teacher7(李 芳 );System.out.println(teacher1.introduction();Teacher7 teacher2 = new Teacher7(张 欣 , “网 络 教 研 室); System.out.println(teacher2.introduction();大 家 好 ! 我 是 软 件 教 研 室 的 李 芳大 家 好 ! 我 是 网 络 教 研 室 的 张 欣 33 方 法 的 重 写 和 重 载 总 结 34 方 法 的 重 载 (overload)l在 同 一 个 类 中 , 一 个 以 上 的 方 法名 称 相 同 ,

35、 参 数 列 表 不 同 , 这 种定 义 方 法 叫 做 方 法 的 重 载 。 35 36 例 如 : public int summn(int m,int n) return m+n; public int summn(int m,int n,int k) return m+n+k; 37 例 如 : public int summn(int m,int n) return m+n; public int summn(int x,int y) return x+y; /是 重 载 吗 ? 不 是 38 l 方 法 的 重 写l 在 子 类 中 , 声 明 和 父 类 中 完 全 相 同(

36、 方 法 名 字 、 参 数 类 型 、 个 数 和 顺 序 )的 方 法 , 叫 做 方 法 的 重 写 。 方 法 的 重 载 和 方 法 的 重 写 , 都 是 实 现 类的 多 态 性 的 重 要 途 径 。 重 写 隐 藏 了 父 类 中 的 同 名 成 员 。 如 果子 类 中 成 员 m 是 重 写 的 , 则 在 子 类 中 访问 m 时 , 访 问 的 是 子 类 中 的 , 而 不 是 父类 中 的 m。 39 访 问 被 重 写 的 方 法 : 有 时 , 需 要 在 子 类 中 访 问 父 类 中被 重 写 的 方 法 , 可 使 用 super 关 键字 来 实 现

37、。 super 代 表 当 前 类 的 直 接 父 类 。 40 public class Fclass public int sum(int m,int n) return m+n; public class Sclass extends Fclass public int sum(int m,int n) int x; x=super.sum(m,n); return x+x; 方 法 重 写 示 例 : 41 总 结 给 定 如 下 Java代 码 , 请 指 出 代 码 中 的错 误 , 并 解 释 原 因 。public class Sample private int x;publ

38、ic Sample() x = 1;public Sample(int i) x = i;public int Sample(int i) x = i;return x+;private Sample(int i, String s)public Sample(String s,int i)private Sampla(int i) x=i+; private void Sampla(int i)x=i+; 无 参 构 造 方 法带 参 构 造 方 法不 是 构 造 方 法带 参 构 造 方 法带 参 构 造 方 法名 称 与 类 名 不 相 同不 是 构 造 方 法 42 生 活 中 的 接

39、 口l 电 脑 主 板 上 的 PCI插 槽 的 规 范 就 类 似 于 Java接 口 声 卡 显 卡网 卡 每 种 卡 的 内 部 结 构 都 不 相 同 , 可 以 把 声 卡 、网 卡 、 显 卡 都 插 在 PCI插 槽 上 , 而 不 用 担 心 哪个 插 槽 是 专 门 插 哪 个 卡 的 主 板 43 什 么 是 Java接 口 2-1l 一 个 Java接 口 是 一 些 方 法 特 征 的 集 合 , 但 没有 方 法 的 实 现public interface PCI public void start(); public void stop();class SoundC

40、ard implements PCI public void start() System.out.println(Du du.); public void stop() System.out.println(Sound stop!); Java接 口 中 定 义 的 方 法 在 不 同 的 地 方 被 实 现 , 可 以 具 有完 全 不 同 的 行 为 这 是 Java接 口 , 相 当 于 主板 上 的 PCI插 槽 的 规 范class NetworkCard implements PCI public void start() System.out.println(Send.); p

41、ublic void stop() System.out.println(Network stop!); 声 卡 、 网 卡 都 实 现 了 PCI插 槽 的 规 范 , 但 行 为 完 全 不 同 44 什 么 是 Java接 口 public class Assembler public static void main(String args) PCI nc = new NetworkCard(); PCI sc = new SoundCard(); nc.start(); sc.start(); 可 以 使 用 Java接 口 标 识 类 型运 行 时 , 根 据 实 际 创 建 的 对 象 类 型 调 用 相 应 的 方 法 实 现Du du.Send.控 制 台 输 出21 45

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!