Java程序设计实战案例教程 第17章 多态

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多态意指相同的消息给予不同的对象会引发不同的 动作
示生例1活1-1中的多态package cn.sxt.pro;
public abstract class Printer {//父类打 面向pp对au封继象cb@kl的装 承iacOg三cvel大eacrs特nr可可si.d征sppB以以exaultac提提b.pckli高高prkacoPgu程代c;ebrlialn序码cisctnes的的s.rsTt安复xeaettxs.全用itpcter性性{nvood;isdPmrianitne}(rS{trinpgu[]balircgasb) s{tract void print();//打
可以接收子类类型
大家好!我是软件教研室的李明 启动 Eclipse 知识点讲解
public void judge(Teacher t){
总结提问
}
t.introduction(); t.giveLesson();
根据实际创建的对象 类型调用相应方法
控制台输
public static void main(String[] args) { 出
大家好!我是网络教研室的张明 启动 Visual Studio 2005 知识点讲解 总结提问
HQ3 hq = new HQ3();
hq.judge(new AccpJavaTeacher2("李明","北京大中家心好“!));我是软件教研室的李岚
}
hhqq..jjuu使,ddgg用无ee((nn多需eeww态更AAcc之改ccpp后 总DDoB,部tTNe当类eatcTh需,eearc要程(h“李e增序r2岚(加的""张,"新可北明京的扩","中天子展心启知总津类性“动识结中)点 提类及S)心;q讲问型可"l)解S);时维erver
第17章 多 态
情境引入
在我们的自然界中,有动物(Animal)之类别( Class),而且由动物继承出类别鸡(Chicken)和类 别狗(Dog),并对同一源自类别动物(父类别)之一 消息有不同、的响应,如类别动物有“叫()”的动作, 而类别鸡会“啼叫()”,类别狗则会“吠叫()”,则称 之为多态。
– 建立DBTeacher类 – 修改总部类,增加方法:judge(DBTeacher t)
能找到这个解决方案的弊端吗?
每增加一种新的教师类型,都要修改总部类,增加相应的 judge(评估)方法,代码的可扩展性及可维护性极差
7
为什么需要多态
• 第种解决方案——使用多态 public class HQ3 {
“));
}
5
为什么需要多态
• 现在,改进教师类,增加一种新类型: DBTeacher,该类型的教师专门负责教授数 据库,要求如下:
– 属性:姓名、所属教研室 – 方法:授课(启动Sql Server、实施理论课授
课)、自我介绍
• 同时,总部也负责对这类教师进行评估
6
为什么需要多态
• 如果在第一种解决方案的基础上去解决, 我们需要如下两个步骤:
总结提问
t.introduction(); t.giveLesson(); } public void judge(DotNetTeacher2 t){ t.introduction();
大家好!我是网络教研室的张明. 启动 Visual Studio 2005 知识点讲解
总结提问
t.giveLesson();
}
护性增强
8
什么是多态
简单来说,多态是具有表现多种形态的能力的特征 同一个实现接口,使用不同的实例而执行不同操作
打印机
打印 彩色打印机
打印 黑白打印机
打印效果:彩色
打印效果:黑白
9
如何实现多态
1、子类重写父类的方法
2、编写方法时,使用父类定义的方法
3、运行时,根据实际创建的对象类型动态决定使用哪个方法
p子ub类li:c c黑la白ss打C印ol机o}rPrinter extends Printer { 子类@p:uO彩b生vli色ec活r打vr中i}od印的ied机多p态rin:t(同) 一{ 种事物,由于条件不同,产生的结果不同
JSayvsa中te的m多.o态ut:.p同rin一tl个n(引"彩用类色型打,印使--用---不--同---的---实--例-")而; 执行不同的操作 } 案例:} 模拟打印机打印文件
为什么需要多态
• 在教师类的基础上,开发一个类代表总 部,负责对各教师进行评估,评估内容 包括:
1、教师的自我介绍 2、教师的授课
4
• 第一种解决方案
public class HQ1 { public void judge(JavaTeacher2 t){
大家好!我是软件教研室的李明. 启动 Eclipse 知识点讲解
public class Teacher {
public class Test {
public void giveLesson(){
public static void main(String[ ] args) {
Systempu.obulitc.pcrlianstlsn(T"e知st识{ 点讲解");
HQ3 hq = new HQ3();
System.opuut.bplricinstltna(t"ic总v结oi提d 问ma")in; (String[ ]haqr.gjusd)g{e(new DBTeacher());
}
public static void main(String[] args) {
HQ1 hq = new HQ1();
控制台输出
hq.judge(new AccpJavaTeacher2(“李明”,“软件教研室“));
hq.judge(new AccpDotNetTeacher2(“张明”,“网络教研室
多p态ublSicysv可toei以md 提.porbu高ilnPta.程tprc(i)krn序i{.ntpe的trrlinn可b(t"l(a扩黑);c/展k/白调=和打n用e可印w黑维.白B..护.l.打a..c性..印k..P.机.r..i.n的"t)e;方r(法); 生活父p}中a类c的:}k多a打g态e印c机n.类sxt,.p功Pcroor能il;no:tre.p打rrci印notl(o)r;/=/调ne用w彩Co色lo打rP印ri机nt的er方();法
相关文档
最新文档