《深入理解多态》PPT课件.ppt

上传人:小飞机 文档编号:4846070 上传时间:2023-05-19 格式:PPT 页数:33 大小:903.10KB
返回 下载 相关 举报
《深入理解多态》PPT课件.ppt_第1页
第1页 / 共33页
《深入理解多态》PPT课件.ppt_第2页
第2页 / 共33页
《深入理解多态》PPT课件.ppt_第3页
第3页 / 共33页
《深入理解多态》PPT课件.ppt_第4页
第4页 / 共33页
《深入理解多态》PPT课件.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《《深入理解多态》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《深入理解多态》PPT课件.ppt(33页珍藏版)》请在三一办公上搜索。

1、第五单元(四),深入理解多态,回顾与作业点评,在子类中访问父类成员的关键字是什么?方法重载和方法重写的区别?笔记本支持用户使用电池(AcPower)和电源(Battery)两种方式进行供电使用多态性输出目前笔记本的电源供电情况“XX供电中”,参考答案,预习检查,子类中定义抽象类的关键字是什么?as关键字的作用?,本章任务,使用OO思想实现员工器乐演奏实现员工执行工作列表、查看工作指标完成情况实现饲养员给不同动物喂食,理解里氏替换原则会使用父类类型作为参数理解抽象类和抽象方法理解虚方法和抽象方法的区别,本章目标,里氏替换原则,/SE ai=new SE();SE joe=new SE();PM

2、gates=new PM();List empls=new List();empls.Add(ai);empls.Add(joe);empls.Add(gates);/,子类可以替换父类,里氏替换原则(LSP)在一个软件系统中,子类对象可以替换所有使用的父类对象,且程序行为没有变化,里氏替换原则的应用,一个鸟类,一个鸵鸟类,如果鸟可以飞,鸵鸟类可以继承鸟类吗?,如果鸵鸟类继承鸟类,违反“鸵鸟会飞”,根据LSP原则:软件设计时,鸵鸟类不能继承鸟类,is与as操作符,is 检查对象是否与指定类型兼容,if(emplsi is SE),判断empl集合的元素是否是SE对象,as 用于在兼容的引用类型

3、之间执行转换,for(int i=0;i empls.Count;i+)if(emplsi is SE)SE se=emplsi as SE;Console.WriteLine(se.SayHi();,一种类型转换方式,转换失败返回值为空,多态的应用2-1,某公司员工回家,可以选择不同交通工具(小汽车、地铁、自行车),每种交通工具具有行驶的行为,编程模拟员工回家的过程,多态的应用2-2,交通工具具有继承关系GoHome(TrafficTool tool),父类类型作为参数,父类类型作为参数2-1,实现交通工具继承关系,public class TrafficTool public virtua

4、l void Run()Console.WriteLine(车在行使!);,public class Car:TrafficTool public override void Run()Console.WriteLine(小汽车在行使!);,父类类型作为参数2-2,实现员工回家,public class Employee.public void GoHome(TrafficTool tool)Console.WriteLine(员工:+this.Name);tool.Run();,List empls=new List();empls.Add(ai);empls.Add(joe);/员工选择不

5、同交通工具回家empls0.GoHome(new Bicycle();empls1.GoHome(new Tube();,父类作为参数使用,可接受多种子类类型,传递实际创建的子类对象,tool.Run()执行相应子类的Run(),小结,实现多态的步骤:子类重写父类的方法两种方式创建父类变量,实例化子类对象把父类类型作为参数类型,该子类及子类对象作为参数传入运行时,根据实际创建的对象决定执行哪个方法,指导实现器乐演奏,训练要点父类类型作为参数需求说明公司举办器乐大赛,员工可以选择不同的乐器进行演奏,模拟演奏过程难点分析不同器乐继承自Instrument类员工具有Play(乐器类型)方法,publ

6、ic void Play(Instrument XX)XX.Play();,支持传入多种子类对象,避免为每一个子类类型编写方法,完成时间:25分钟,共性问题集中讲解,常见调试问题及解决办法代码规范问题,共性问题集中讲解,为什么需要抽象方法,public class TrafficTool public virtual void Run()Console.WriteLine(车在行使!);,交通工具类是抽象的概念,根本不可能实例化,Run()方法不具有实际意义!,public abstract class TrafficTool public abstract void Run();,使用抽象类

7、、抽象方法优化程序,public abstract class TrafficTool public abstract void Run();,抽象类和抽象方法,抽象方法,一个没有实现的方法,有抽象方法的类必然是抽象类,抽象类用来列举一个类所需要的行为抽象类不明确提供具体实现方法抽象类必须由其子类实现它的抽象方法(除非子类也具有抽象性),常见错误,抽象类不能被实例化,抽象类不能是静态的,TrafficTool tool=new TrafficTool();,编译错误,抽象类不能用static修饰,实现抽象方法,使用override实现抽象方法,class Tube:TrafficTool pu

8、blic override void Run()Console.WriteLine(地铁运行中!);,重写,必须实现抽象父类中的抽象方法,抽象类的实际应用3-1,实现员工执行工作列表、查看工作指标完成情况,不同工作执行的指标项不同,因此窗体不同,抽象类的实际应用3-2,工作类型有很多且执行指标不同编码、测试、审核,模拟执行工作,显示对应类型工作窗体,显示工作完成情况,测试类型工作特有指标,编码类型工作特有指标,抽象类的实际应用3-3,public abstract class Job.定义公共属性./执行 public abstract void Execute();/显示 public ab

9、stract string Show();,public class CodeJob:Job/实现抽象Job的Execute方法 public override void Execute()FrmCodeExe frmCodeExe=new FrmCodeExe(this);frmCodeExe.ShowDialog();,打开不同工作类型的窗体,填写指标执行情况,传递当前对象的引用,抽象方法,抽象类的应用场合,父类提供一系列规定,约束子类的行为,父类可以提供一些共性的行为,抽象类和抽象方法实现多态性,对比虚方法,抽象类和抽象方法抽象类通常代表一个抽象的概念抽象方法约束子类对象的行为比如:抽象

10、的动物类,具有抽象方法吃()、喝()虚方法具体类的默认实现,提供其子类扩展实现方式比如:数据库连接类,Connect()方法实现与SQL Server的连接,数据库连接子类继承并重写它,实现与MySQL连接,抽象方法与虚方法,抽象类中可以包括抽象方法和非抽象方法,面向对象的三大特性,隐藏内部实现,稳定外部接口,封装,继承,子类继承父类成员,实现代码复用,多态,不同子类对同一个消息作出不同的反映,任务5.7 计算圆面积和周长、圆柱体面积和体积,任务描述:设计计算器界面通过多级继承,完成圆面积和周长的计算、圆柱体面积和体积的计算。,将圆心坐标定义为基类,在基类中包含坐标X属性和Y属性,定义Prin

11、t方法用来输出圆心坐标位置 继承基类建立圆派生类,新增圆的半径R属性,定义求圆面积和周长的方法,并重写Print方法用来输出圆心坐标、圆面积和周长 将圆作为基类建立圆柱派生类,新增圆柱体的高度Height这一属性,重写求面积方法,改为求圆柱表面积,定义求体积的方法,重写Print方法用来输出圆柱体表面积和体积等,任务 5.3 根据圆的半径计算圆面积,定义基类,public class Centre protected int x,y;public Centre()public Centre(int myx,int myy)x=myx;y=myy;public virtual string Pr

12、int()string str=圆心坐标:(+X.ToString()+,+Y.ToString()+);return str;,构造函数,虚拟方法,定义派生类,public class Round:Centre/定义派生类 private int r;public Round()public Round(int myx,int myy,int myr):base(myx,myy)r=myr;public override string Print()string str=base.Print()+rn+圆的面积:+Area().ToString()+rn+圆的周长:+Perimeter().

13、ToString();return str;,方法覆盖,从派生类中访问基类的属性和方法成员,指导员工执行工作列表,训练要点抽象类和抽象方法需求分析实现员工执行工作列表编码工作指标项:有效编码行数、遗留问题、工作日测试工作指标项:测试用例个数、发现的Bug数、工作日实现思路搭建窗体编写Job类编写Job子类(TestJob、CodeJob),并实现抽象Execute()方法实现右键“执行”响应事件,完成时间:25分钟,练习查看工作指标完成情况,需求说明实现员工查看工作指标完成情况,完成时间:15分钟,总结,实现面向对象的多态性有哪几种方法?抽象类可以被继承吗?抽象方法可以有方法体吗?简述抽象方法和虚方法的区别?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号