07面向对象的C#2_第1页
07面向对象的C#2_第2页
07面向对象的C#2_第3页
07面向对象的C#2_第4页
07面向对象的C#2_第5页
已阅读5页,还剩19页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、任务七新来的员工 7.1求最值程序 7.2程序解析 7-3必备知识 7.4实战演练 7.1求最值程序 2亠 4 7.2程序解析 类中有4个同名的max方法 功能相同 参数不同 方法的重载 编译器能够根据参数的类型选择合适的方法 3 1 7.3必备知识 7.3.1畫载方法 7.3.2重载运算符 7-3-3继承 7.3.4多态性和虚方法 7.3.5抽象类和抽象方法 类名 示例内容 页码 Max 方法重载 94 Com plex 重载运算符+ 98 Angle 重载运算符+ 100 TwoD 重载运算符+ 101 重载关系运算符 104 DoubO p 重载运算符+ 103 Student 系列 继

2、承 106 继承 109 隐藏 110 Vehicle 系歹 ij 多态 118 抽象类 123 抽象方法 125 Empio yee 系歹 ij 多态 112 实战演练 127 A、B 虚方法与非虚方法 Person系列 抽象类和抽象方法 5 7.3.1重载方法 例:Console类的WriteLine方法 方法a载 方法名相同(前提:功能相近) 参数类型或者个数不同 函数返回值与方法重载 如果仅是函数返回值类型不同,并不是方法重载 方法的签名(MSDN) 由方法的名称和它的形参表组成。 形参按从左到右的顺序比较类型、种类和个数。 为类定义方法时只要保证方法的签名是ft-的 I 7.3.2重

3、载运算符 1 什么是运算符盍载 2 如何实现运算符重载 3 畫载双目运算符 4 重载单目运算符 5 重载关系运算符 对于不同的操作对象, 运算符实现了不同的运算操 1 什么是运算符重载 口运算符“4,的盍载 数值类型的“+”运算 罪; 字符串类型的“+”运算 DateTime类型的“+”运算 系统预定义的运算符不够用 主要是以基本数据类型为操作对象 对于引用类型,则应根据需要为运算符提供新的运算 规则 9 2如何实现运算符重载 例 7-2 运算符*载实质上就是函数S载 运算符的函数表示法 运算符 op X X op xopy 函数表示法 operator op(x) operator op(x

4、) operator op(x,y) 语法规定 允许重载的运算符:表71 P99 必须是 punlic 和 static 9至少有一个参数是类自身 3 重载双目运算符 口例:Angle 例:TwoD 10 4重载单目运算符 例:DoubOP 单目运算符的两种形式畫载后变成一致 11 5重载关系运算符 关系运算符必须成对s载 和 口=和= =和!= 例:TwoD 12 I继承概念的引入 L| 认识世界的基本方法 按不同的类别 如:自行车是一种交通工具。 继承 口模拟“IS_A”关系中隐含的既相似又不同的特性 交通工具I垄类/父类 厶 13 自行车I派q:类类 14 7.3.3继承 E 1 理解继

5、承的机制 2 继承的基本特征 (3基类与派生类的方法 4 用base调用基类的成员 5 继承中的构造函数的执行序列 I 例:7-3 1研究生属于学生的一种 学生有学号和姓名属性 研究生除学号和姓名外,还有工资属性 4 16 1 继承的机制 继承是面向对象技术最有特色、最重要.也是与 传统编程方法最不相同的。 继承表示了实体间的一种层次关系。 基类/父类,派生类/子类 派生类可以继承基类的特征和能力,如属性和方法。 派生类还可以添加新的特性或者是修改已有的特性以 满足特定的要求,但不能删除基类的成员。 口一个父类可以有多个子类。父类是所有子类公共特征 的集合,子类则是父类的特殊化。 C#中每个子

6、类只能有一个基类,即不允许多重继承 继承的好处:实现了代码重用 17 2继承的基本特征 派生类可以继承基类中除构造函数和析构函数外 的所有可访问的成员 访问修饰符protected的作用 子类可以访问,其他的类都不可以访问 口继承是可传递的P108 基类与派生类之间的转换 18 基类与派生类间的转换 隐式转换 派生类T基类 显式转换 基类T派生类(有条件) ! Parent p= new Child(); Child c=(Child)p; Parent p= new ParentO; Child g(Child)p; 就出具常;InvalidCastException | J 19 3基类与

7、派生类的方法 基类与派生类方法之间的关系 类型 说明 扩充 是派生类新增的,基类没有。 重载 完全相同 派生类中有与基类同名的方法, 但参数类型或个数不同 派生类中定义了一个与基类相同的方法, 即方法的原型完全相同 方法的隐藏(hide,覆盖)L V 方法的重写(734)Z 用base调用已被派生类重写的基类方法 20 class Parent public void Hi deFun 0 Console. Wr i t eLine C 父类 Par nt 的Hi deFun 方法: class Child : Parent public void HideFun () Console. Wr

8、 i teLineC*子类Ghi Id的HideFun方法); class Program static void Main (str ing argsJ Parent p = new Parent (): Child c = new Ch iId 0; Parent IHideFun 7 丄 子类Child的HidFun方法 文类P a厂ent的HideFun方法 Par令nt pc=c; p HideFun 0: c HideFun 0: pc, HideFun (); ”方法的隐藏 Console. RsadKey (): 派生类可以定义与基类具有相同签名的方法 new关键字 派生类定义

9、与基类具有相同签名的方法时,需要使用 new关键字,否则编译器将给出警告 22 方法的隐藏 当用派生类的对象访问同名的方法时 执行派生类的方法? 对象变量HideFun() I lii寸a变量的类型决定 执行基类的方法? 调用方法 说明 p.HideFunO p是Parent.执行Parent的HideFun c.HideFunO c是Child.执行Child的HideFun pc.HideF un() pc是Parent.执行Parent的HideFun 23 class Parent public void Hi deFun ()|. , . 1 public virtual void

10、Vi rtualFun() Console WriteLineC父娄Parent的VirtualF”方法); class Child : Parent pub Iic new void HidoFun 0| ,4 public override void Vi rtuaIFun t) Console. Wr *teLineC子类Chi Id Child c = new Chi Id 0 : Paront pc=c. P Vi rtuaIFun 0: c, VirtualFunO ; pc VirtualFun (); Console. ReadKeyG : 方法的重写 方法畫写 对基类同名方法

11、,用关键字SHual修饰,即虚方法 对派生类同名方法,用关键字override修饰 虚方法调用的特点 由对象变量所引用的对象来决定执行哪一个方法,而 与对象变量本身的类型无关 方法重写是实现多态的一种方法 多态:用同样的一个语句,执行不同的操作。 25 class Vehicle return 交通丄具启动 飞机起飞 class Car : VehicIe pub Iic overr ide str ing Start 0 class Classi return 汽车起步: STAThread Static void MainCstr ing args) class Plane : Vehic

12、le public overr ide string Start () Vehicle: =new VehicleO : =non Car ); Vehicle v = new v0; qq 、 v2=new PlanoO ; pub Iic virtual str ing Start C 27 return 飞机起飞: foroaoh CVohicIo ve in v) Console, Wr i teLinve. Start 0 ); Con so I e, ReadKey 0 : I 4用base调用基类的成员 口在派生类中调用基类的方法 未被重写或隐藏的方法:直接调用 已被重写或隐藏的

13、方法:用base调用 在派生类的构造函数中,用关键字base来调用基 类的构造函数 特殊的调用语法P107、P109 关键字base与this 27 28 15.继承中构造函数的iili序列 口基类中必须有默认构造函数,否则编译无法通过 原因:保证构造函数的执行序列不能中断 例外 派生类用base关键字改变了构造函数的执行序列 7.3.4多态性和虚方法 1 理解多态 2 如何实现多态 29 1 1 理解多态 多态是面向对象的三大特征之一 例:7-4 同样的指令:E.Raise(0.05)得到不同的执行结果 根据E中员工的类型, 用各自的公式计算增加的工资 30 I 2如何实现多态 ac#中有两

14、种实现多态的方法 通过继承实现多态 通过接口实现多态 通过继承,可以用两种方法来实现多态 重写基类的虚方法(虚方法重载) 重写基类的抽象方法 31 I 对基类虚方法的重载(重写) 基类和派生类中定义完全相同的两个方法 方法名相同 对应的参数相同 返回值相同 语法规定 基类的方法必须用virtual修饰符定义为虚方法 派生类必须用override修饰符重新定义该方法 与非虚方法的比较 32 7.3.5抽象类和抽象方法 1 理解抽象类 2 抽象类的语法规则 3 理解抽象方法 4 抽象方法的语法规则 5 其他 33 1 理解抽象类 例74中的Emp loee类 体现所有派生类的共同特征 但没有具体的

15、有意义的实例对象与之对应 Emploee类的用途 为派生类提供一个基础框架,提高代码的畫用性 -I简化派生类的定义 -I不需重复定义共同的特征 35 I 2.抽象类的语法规则 1 定义 类前面加上关键字abst ract 通常只作为基类使用,应该包含所有派生类的共同特征 使用 抽象类不能直接用new实例化 抽象类只作为基类使用 例;P123 35 亠、 I 3理解抽象方法 例:7-5 抽象方法:PlayFillName方法 抽象方法只定义方法的原型,但不含有方法体 派生类中必须实现(重写)抽象方法 抽象方法的用途 约束所有派生类都必须实现抽象方法,从而确保派生 类都应该提供同样的功能 方法的原型必须相同 J但可以使用不同的算法来实现 36 I 4抽象方法的语法规则 定义 只能在抽象类中定义抽象方法 抽象方法须使用关键字abstract 只需声明扌由象方法的原型 抽彖方法只有原型,没有方法体

温馨提示

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

评论

0/150

提交评论