- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 客户管理系统的实现(3)---继承与多态 项目六 回顾与作业点评 派生类的定义 派生类的构造函数与析构函数 继承机制的访问权限 项目任务 任务6-2同一问题的不同处理方法------虚方法与多态 (1)、理解多态的概念 (2)、掌握虚方法与虚方法的重载 (3)、理解里氏替换与多态 不同的对象得到同一个消息,如何描述其不同行为 预习检查 子类中调用父类成员的关键字是什么? 重写父类方法使用什么关键字? 生活中的多态 Cut….!!! 听到这个声音他们会做什么? 剪断头发 切开皮肤 停止表演 不同对象对于同一个方法(Cut)实现不同的行为 理发师 外科医生 演员 什么是多态 多态:指两个或多个属于不同类的对象,对同一个消息(方法调用)作出不同响应的能力 同一个类在不同场合下表现出不同的行为特征 PM对象和SE对象SayHi()的内容不同 Employee SE PM Employee类,在这两种场合的行为不同 C#中的多态 C#支持两种类型的多态性: (1)编译时的多态性 编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。其优点是速度快,缺点是灵活性不够。采用用重载函数的方式实现。 (2)运行时的多态性 运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。其优点是灵活性和抽象、缺点是执行效率差。通过继承和虚函数来实现。 多态性和虚方法 在C#中,多态性是通过“虚方法重载”来实现在程序中调用相应对象所属类中的方法,而不是调用基类的方法。 C#语言可以在派生类中实现对基类的某个方法、属性或索引等类成员重新定义,而这些成员名和相应的参数都不变,这种特性叫虚成员重载。 虚方法重载就是指将基类的某个方法在其派生类中重新定义,也叫重写方法,而方法名和方法的参数都不改变。 多态性和虚方法 定义虚方法的格式为: class FatherClass //基类 { …… //其他类成员 [修饰符] virtual 返回类型 方法名(参数表) { …… //方法体 } } 多态性和虚方法 定义重载虚方法(覆盖方法)的格式为: class SonClass:FatherClass //派生类 { …… //其他类成员 [修饰符] override 返回类型 方法名(参数表) { …… //方法体 } } 在派生类中用override修饰符重新定义与基类同名的覆盖成员,并根据需要重新定义基类中虚成员的代码(方法重写),以满足不同类的对象的使用需求,这就是重载虚成员——多态的实现 利用虚方法实现多态 public class DrawingBase { public virtual void Draw( ) { Console.WriteLine(这是一个虚方法!) ; } } 用关键字修饰 public class Circle : DrawingBase{ public override void Draw( )//重写基类方法 { Console.WriteLine(画圆.) ; } } public class Line : DrawingBase{ public override void Draw( )//重写基类方法 { Console.WriteLine(画线.) ; } } 用关键字修饰 这种方式实现了 面向对象的多态 定义一个带有虚方法的基类 带有重载方法的派生类 重写 public static void Main() { DrawingBase D; D = new Line(); D.Draw(); D = new Circle(); D.Draw(); } override关键字实现方法重写 方法名、参数列表、返回值一样,提供不同的实现 根据实际创建的对象类型,决定执行哪个方法。 呈现多态性! 虚方法与非虚方法的区别 对于非虚的方法,无论被其所在类的实例调用,还是被这个类的派生类的实例调用,方法的执行方式不变。 而对于虚方法,它的执行方式可以被派生类改变,这种改变是通过方法的重载来实现的 虚方法与非虚方法的区别 //定义基类 class A{ public void F() { Console.WriteLine(基类非虚方法A.F); } public virtual void G() { Console.WriteLine(基类虚方法A.G); } } 定义派生类 class B : A { new public void F() { Console.Wr
文档评论(0)