北大青鸟accp6.0深入.net平台和编程参考答案tp_第1页
北大青鸟accp6.0深入.net平台和编程参考答案tp_第2页
北大青鸟accp6.0深入.net平台和编程参考答案tp_第3页
北大青鸟accp6.0深入.net平台和编程参考答案tp_第4页
北大青鸟accp6.0深入.net平台和编程参考答案tp_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、第六章初识继承和多态回顾与作业点评使用new实例化对象时,调用了什么?说出方法重载的几个特点?预习检查子类中调用父类成员的关键字是什么?重写父类方法使用什么关键字?本章任务使用继承和多态实现模拟汽车行驶实现员工汇报工作实现计算器理解继承的概念能够利用继承建立父类和子类理解多态的概念会重写虚方法实现多态本章目标代码冗余对比两个类PM、SE加入CEO类,具有这些相同的属性年龄、性别、姓名等是重复的如何共用重复代码?提取冗余代码将公共的成员放到一个类中保留自己特有的成员保留自己特有的成员提取后的应用class SE:Employee public SE(string id, string name,

2、 int age, Gender gender,int popularity) this.ID = id; this.Name = name; this.Age = age; this.Gender = gender; this.Popularity = popularity; / 人气值 public int Popularity get; set; .只有特有的属性公共属性仍可访问继承卡车和巴士都是汽车 生活中的继承汽车 刹车行驶共有行为:轮子发动机共有特征:卸货拉货各自行为:载重货舱各自特征:停靠站报站各自行为:载客量客舱各自特征:他们共有的特征来自汽车有什么共同特征呢?卡车 公共汽车

3、继承概述2-1继承:在 C# 中,类可以继承自另一个类。衍生的类(子类)继承父类的方法和数据成员子类继承父类,父类派生子类父类又叫基类子类又叫派生类Employee PM SE 子类 父类 class 子类 : 父类 继承概述2-2继承是面向对象的一个重要特性继承指出两个类是“A 是 B”关系继承在类图中的表示自己特有的成员继承父类的成员继承需要符合的关系:is-aSE is a Employee继承的实际应用3-1部门所有人都自我介绍SayHi()SE 大家好,我是 XX, 今年 XX岁,工号是 XX,我的人气值高达 XX!PM 大家好,我是 XX ,今年 XX岁,项目管理经验 XX年。子类

4、特有属性子类中访问继承父类的公共属性继承的实际应用3-2SE类和PM类都继承Employee父类子类构造函数设置公共属性和特有属性public class PM:Employeepublic class SE:Employeepublic SE(string id, string name, int age, Gender gender,int popularity) this.ID = id; this.Name = name; this.Age = age; this.Gender = gender; this.Popularity = popularity;继承自父类的公共属性子类扩展的

5、属性实现继承继承的实际应用3-3子类特有的SayHi()方法实例化对象调用SayHi()public string SayHi() /SE的SayHipublic string SayHi() /PM的SayHi/实例化一个程序员对象SE engineer = new SE(112, 艾边成, 25, Gender.male, 100);Console.WriteLine(engineer.SayHi();/实例化一个PM对象PM pm = new PM(890,盖茨,50,Gender.female,50);Console.WriteLine(pm.SayHi();SE调用自己的SayHi(

6、) PM调用自己的SayHi() 演示示例:使用继承实现问好base调用父类成员关键字base的作用调用父类的属性和方法public string SayHi() string message = string.Format( 大家好,我是 0, 今年 1岁,工号是 2,我的人气值高达 3!, base.Name, base.Age, base.ID, this.Popularity); return message;调用父类的属性protected访问修饰符如何让父类中的某个成员只允许其子类访问protected访问修饰符只允许继承它的子类访问 父类成员public修饰子类继承并可以访问pr

7、ivate修饰子类无法访问演示示例:protected访问修饰符类内部子类其他类public可以可以可以private可以不可以不可以protected可以可以不可以揭秘子类构造函数构造子类对象,父类做了什么?base关键字:显示调用父类构造函数演示示例:断点追踪实例化对象过程public SE(string id,string name,int age, Gender gender, int popularity) : base(id, age, name, gender) this.Popularity = popularity;显示调用父类的构造函数公共属性在父类构造函数中初始化,代码简

8、洁、冗余少演示示例:使用base指定调用父类构造函数public SE(string id, string name, int age, Gender gender,int popularity) this.ID = id; . this.Popularity = popularity;base()隐式调用父类构造函数常见错误2-1class Student:Person public Student(int age, string name, string hobby) :base(int age, string name) this.Hobby = hobby; 调用父类构造函数:传递参数

9、编译错误常见错误2-2class Person public Person(int age, string name) this.Age = age; this.Name = name; public int Age get; set; public string Name get; set; class Student:Person public Student(int age, string name, string hobby) this.Age = age; this.Name = name; this.Hobby = hobby; base()父类要提供无参的构造函数如果父类没有无参

10、的构造函数子类构造函数必须指明调用父类哪个构造函数指导模拟汽车行驶训练要点继承base关键字需求说明控制台程序实现汽车与卡车的继承汽车类Vehicle有VehicleRun ()方法, 输出“汽车在行驶!”卡车类Truck有TruckRun()方法,输出“型号为XX、产地为XX的卡车在行驶!”实例化一个卡车调用汽车和卡车的方法指导模拟汽车行驶实现思路创建Vehicle,并添加属性“类型”和“产地”以及构造函数Vehicle类添加方法VehicleRun()创建Truck类继承Vehicle,添加构造函数Truck类添加方法TruckRun()编写测试方法完成时间:15分钟继承的传递性汽车双层

11、单层 小型卡车 重型卡车 同样具有汽车的特征继承的传递性卡车公共汽车还可以派生更多的类型继承的传递性添加一个微型卡车类public class SmallTruck : Truck public void SmallTruckRun() Console.WriteLine(微型卡车在行驶!); static void Main(string args) SmallTruck smalltruck = new SmallTruck(); smalltruck.VehicleRun(); smalltruck.TruckRun(); smalltruck.SmallTruckRun(); publ

12、ic class Truck : Vehicle继承关系父类的父类成员父类的成员传递性继承单根性public class CharmingPerson : SE, Musician编译错误C#中子类不能继承多个父类CharmingPerson 软件工程师 音乐家 某类人是否可以这样描述?具有两种人的特征软件开发中继承的妙处模拟现实世界的关系便于重用和扩展已彻底测试的代码,且无需修改结构更清晰SE人气值Employee姓名年龄子类更加关注与子类相关的行为和状态共有属性由父类负责IS-A的应用实现多个员工逐个问好(包括SE和PM)子类 is-a 父类,子类可以加入父类类型的泛型集合ListSE a

13、i = new SE(112, 艾边成, 25, Gender.male, 100);List empls = new List();empls.Add(ai);if (empls0 is SE) SE se = (SE)empls0; Console.WriteLine(se.SayHi();演示示例:is a的应用is检查类型指导实现工作汇报训练要点继承构造函数IS-A需求说明PM类和SE类均继承Employee,公共属性在父类构造函数中初始化实现不同员工汇报工作方法DoWork()SE通过遍历工作项,输出工作信息PM输出固定工作信息指导实现工作汇报难点分析Job类定义工作项SE和PM继承

14、员工类DoWork()方法是子类特有的方法完成时间:25分钟扩展的麻烦添加对象后遍历泛型集合List empls = new List();foreach(Employee empl in empls) if (empl is SE) Console.WriteLine(SE)empl).SayHi(); if(empl is PM) Console.WriteLine(PM)empl).SayHi(); 进行判断对象类型调用相应类的SayHi()添加多个不同的子类,SayHi()都不同,增加代码复杂度如何解决? 巧妙减少判断冗余修改Employee类修改子类SayHi()方法去除子类类型判断

15、public virtual string SayHi() string message = string.Format(大家好!); return message;添加SayHi()方法 用关键字修饰 foreach(Employee empl in empls) Console.WriteLine(empl.SayHi(); public override string SayHi() 用关键字修饰 这种方式实现了面向对象的多态 简化了代码维护 生活中的多态Cut.!听到这个声音他们会做什么?剪断头发切开皮肤停止表演不同对象对于同一个方法(Cut)实现不同的行为 理发师 外科医生 演员 什

16、么是多态多态:指两个或多个属于不同类的对象,对同一个消息(方法调用)作出不同响应的能力同一个类在不同场合下表现出不同的行为特征PM对象和SE对象SayHi()的内容不同 Employee SE PM Employee类,在这两种场合的行为不同重写虚方法实现多态2-1方法重写:子类重写父类方法public class Employee public virtual string SayHi() string message = string.Format(大家好!); return message; public class SE:Employee public override string

17、SayHi() 重写方法名、参数列表、返回值一样,提供不同的实现virtual关键字表示虚方法override关键字实现方法重写1重写虚方法实现多态2-2方法调用:2Employee ema = new SE(210,Ema,33,Gender.female,100);Console.WriteLine(ema.SayHi();定义父类变量,创建子类对象foreach(Employee empl in empls) Console.WriteLine(empl.SayHi(); 根据实际创建的对象类型,决定执行哪个方法。呈现多态性!演示示例:重写虚方法实现多态练习多态实现工作汇报需求说明去除冗余的判断,实现不同员工汇报工作完成时间:15分钟共性问题集中讲解常见调试问题及解决办法代码规范问题共性问题集中讲解指导计算器训练要点理解多态虚方法方法重写需求分析使用多态实现计算机器指导计算器实现思路创建父类Operation属性NumberA和NumberB虚方法GetResult()依次创建子类Opeartio

温馨提示

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

评论

0/150

提交评论