欢迎来到天天文库
浏览记录
ID:36911648
大小:903.10 KB
页数:33页
时间:2019-05-10
《《深入理解多态》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五单元(四)深入理解多态回顾与作业点评在子类中访问父类成员的关键字是什么?方法重载和方法重写的区别?笔记本支持用户使用电池(AcPower)和电源(Battery)两种方式进行供电使用多态性输出目前笔记本的电源供电情况“XX供电中…”参考答案预习检查子类中定义抽象类的关键字是什么?as关键字的作用?本章任务使用OO思想实现员工器乐演奏实现员工执行工作列表、查看工作指标完成情况实现饲养员给不同动物喂食理解里氏替换原则会使用父类类型作为参数理解抽象类和抽象方法理解虚方法和抽象方法的区别本章目标里氏替换原则//…SEai=newSE();SEjoe=newSE();PMg
2、ates=newPM();Listempls=newList();empls.Add(ai);empls.Add(joe);empls.Add(gates);//…子类可以替换父类里氏替换原则(LSP)在一个软件系统中,子类对象可以替换所有使用的父类对象,且程序行为没有变化里氏替换原则的应用一个鸟类,一个鸵鸟类,如果鸟可以飞,鸵鸟类可以继承鸟类吗?如果鸵鸟类继承鸟类,违反“鸵鸟会飞”根据LSP原则:软件设计时,鸵鸟类不能继承鸟类is与as操作符is检查对象是否与指定类型兼容if(empls[i]isSE)判断empl集合的元素是
3、否是SE对象as用于在兼容的引用类型之间执行转换for(inti=0;i4、licclassTrafficTool{publicvirtualvoidRun(){Console.WriteLine("车在行使!");}}publicclassCar:TrafficTool{publicoverridevoidRun(){Console.WriteLine("小汽车在行使!");}}父类类型作为参数2-2实现员工回家publicclassEmployee{......publicvoidGoHome(TrafficTooltool){Console.WriteLine("员工:"+this.Name);tool.Run();}}List5、loyee>empls=newList();empls.Add(ai);empls.Add(joe);//员工选择不同交通工具回家empls[0].GoHome(newBicycle());empls[1].GoHome(newTube());父类作为参数使用,可接受多种子类类型传递实际创建的子类对象,tool.Run()执行相应子类的Run()小结实现多态的步骤:子类重写父类的方法两种方式创建父类变量,实例化子类对象把父类类型作为参数类型,该子类及子类对象作为参数传入运行时,根据实际创建的对象决定执行哪个方法指导—实现器乐演奏训练要点父类类型作为6、参数需求说明公司举办器乐大赛,员工可以选择不同的乐器进行演奏,模拟演奏过程难点分析不同器乐继承自Instrument类员工具有Play(乐器类型)方法publicvoidPlay(InstrumentXX){XX.Play();}支持传入多种子类对象,避免为每一个子类类型编写方法完成时间:25分钟共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解为什么需要抽象方法publicclassTrafficTool{publicvirtualvoidRun(){Console.WriteLine("车在行使!");}}交通工具类是抽象的概念,根本不可能实例化,7、Run()方法不具有实际意义!publicabstractclassTrafficTool{publicabstractvoidRun();}使用抽象类、抽象方法优化程序publicabstractclassTrafficTool{publicabstractvoidRun();}抽象类和抽象方法抽象方法一个没有实现的方法有抽象方法的类必然是抽象类抽象类用来列举一个类所需要的行为抽象类不明确提供具体实现方法抽象类必须由其子类实现它的抽象方法(除非子类也具有抽象性)常见错误抽象类不能被实例化抽象类不能是静态的TrafficTooltool=newTra
4、licclassTrafficTool{publicvirtualvoidRun(){Console.WriteLine("车在行使!");}}publicclassCar:TrafficTool{publicoverridevoidRun(){Console.WriteLine("小汽车在行使!");}}父类类型作为参数2-2实现员工回家publicclassEmployee{......publicvoidGoHome(TrafficTooltool){Console.WriteLine("员工:"+this.Name);tool.Run();}}List5、loyee>empls=newList();empls.Add(ai);empls.Add(joe);//员工选择不同交通工具回家empls[0].GoHome(newBicycle());empls[1].GoHome(newTube());父类作为参数使用,可接受多种子类类型传递实际创建的子类对象,tool.Run()执行相应子类的Run()小结实现多态的步骤:子类重写父类的方法两种方式创建父类变量,实例化子类对象把父类类型作为参数类型,该子类及子类对象作为参数传入运行时,根据实际创建的对象决定执行哪个方法指导—实现器乐演奏训练要点父类类型作为6、参数需求说明公司举办器乐大赛,员工可以选择不同的乐器进行演奏,模拟演奏过程难点分析不同器乐继承自Instrument类员工具有Play(乐器类型)方法publicvoidPlay(InstrumentXX){XX.Play();}支持传入多种子类对象,避免为每一个子类类型编写方法完成时间:25分钟共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解为什么需要抽象方法publicclassTrafficTool{publicvirtualvoidRun(){Console.WriteLine("车在行使!");}}交通工具类是抽象的概念,根本不可能实例化,7、Run()方法不具有实际意义!publicabstractclassTrafficTool{publicabstractvoidRun();}使用抽象类、抽象方法优化程序publicabstractclassTrafficTool{publicabstractvoidRun();}抽象类和抽象方法抽象方法一个没有实现的方法有抽象方法的类必然是抽象类抽象类用来列举一个类所需要的行为抽象类不明确提供具体实现方法抽象类必须由其子类实现它的抽象方法(除非子类也具有抽象性)常见错误抽象类不能被实例化抽象类不能是静态的TrafficTooltool=newTra
5、loyee>empls=newList();empls.Add(ai);empls.Add(joe);//员工选择不同交通工具回家empls[0].GoHome(newBicycle());empls[1].GoHome(newTube());父类作为参数使用,可接受多种子类类型传递实际创建的子类对象,tool.Run()执行相应子类的Run()小结实现多态的步骤:子类重写父类的方法两种方式创建父类变量,实例化子类对象把父类类型作为参数类型,该子类及子类对象作为参数传入运行时,根据实际创建的对象决定执行哪个方法指导—实现器乐演奏训练要点父类类型作为
6、参数需求说明公司举办器乐大赛,员工可以选择不同的乐器进行演奏,模拟演奏过程难点分析不同器乐继承自Instrument类员工具有Play(乐器类型)方法publicvoidPlay(InstrumentXX){XX.Play();}支持传入多种子类对象,避免为每一个子类类型编写方法完成时间:25分钟共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解为什么需要抽象方法publicclassTrafficTool{publicvirtualvoidRun(){Console.WriteLine("车在行使!");}}交通工具类是抽象的概念,根本不可能实例化,
7、Run()方法不具有实际意义!publicabstractclassTrafficTool{publicabstractvoidRun();}使用抽象类、抽象方法优化程序publicabstractclassTrafficTool{publicabstractvoidRun();}抽象类和抽象方法抽象方法一个没有实现的方法有抽象方法的类必然是抽象类抽象类用来列举一个类所需要的行为抽象类不明确提供具体实现方法抽象类必须由其子类实现它的抽象方法(除非子类也具有抽象性)常见错误抽象类不能被实例化抽象类不能是静态的TrafficTooltool=newTra
此文档下载收益归作者所有