欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第5章抽象类多态和接口课件.ppt

    • 资源ID:50887130       资源大小:2.15MB        全文页数:24页
    • 资源格式: PPT        下载积分:18金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要18金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第5章抽象类多态和接口课件.ppt

    第第5章抽象类多态和章抽象类多态和接口接口第1页,此课件共24页哦理解抽象类、多态和接口理解抽象类、多态和接口在在C#中使用抽象类、多态和接口中使用抽象类、多态和接口主要内容主要内容第2页,此课件共24页哦什么是抽象类?什么是抽象类?抽象方法:包含方法定义,但没有具体实现的方法,需要其子类或者子抽象方法:包含方法定义,但没有具体实现的方法,需要其子类或者子类的子类来具体实现。类的子类来具体实现。抽象类:含有一个或多个抽象方法的类称为抽象类。抽象类不能够被实例化,这抽象类:含有一个或多个抽象方法的类称为抽象类。抽象类不能够被实例化,这是因为它包含了没有具体实现的方法。是因为它包含了没有具体实现的方法。使用关键字使用关键字abstract修饰修饰第3页,此课件共24页哦声明抽象类声明抽象类抽象类抽象类publicabstractclassPlayer抽象方法抽象方法.在在C#中,使用关键字中,使用关键字abstract来定义抽象方法(来定义抽象方法(abstractmethod),并需要把),并需要把abstract关键字放在访问级别修饰符和方法关键字放在访问级别修饰符和方法返回数据类型之前,没有方法实现的部分,格式如下:返回数据类型之前,没有方法实现的部分,格式如下:publicabstractvoidTrain();.子类继承抽象父类之后,可以使用子类继承抽象父类之后,可以使用override关键字覆盖父类中的关键字覆盖父类中的抽象方法,并做具体的实现,格式如下:抽象方法,并做具体的实现,格式如下:publicoverridevoidTrain()第4页,此课件共24页哦抽象类和抽象方法抽象类和抽象方法abstractclassClassOne/类实现访问修饰符派生类的基类不能实例化第5页,此课件共24页哦abstractclassBase/成员变量成员变量intbasevar;/成员函数成员函数abstractvoidbase_fun1(parameters);/无法实现无法实现.抽象方法抽象方法classDerived:Base/成员变量成员变量intderivedvars;/成员函数成员函数overridevoidBase_fun1(parameters)/实际实现实际实现.抽象类派生类提提供供重写方法原型原型必须重写重写抽象类和抽象方法抽象类和抽象方法第6页,此课件共24页哦演示usingSystem;namespaceExample_5abstractclassABCpublicabstractvoidAFunc();publicvoidBFunc()Console.WriteLine(“这是一个非抽象方法!);classDerv:ABCpublicoverridevoidAFunc()Console.WriteLine(“这是一个抽象方法!);抽象类 不能实例化派生类 重写方法staticvoidMain(stringargs)DervobjB=newDerv();objB.AFunc();objB.BFunc();第7页,此课件共24页哦abstractclassMyAbspublicabstractvoidAbMethod();/派生类classMyClass:MyAbspublicoverridevoidAbMethod()Console.WriteLine(“在MyClass中实现的抽象方法);/派生自MyClass的子类classSubMyClass:MyClasspublicvoidGeneral()/未实现AbMethod抽象方法Console.WriteLine(在SubMyClass中未实现的抽象方法);staticvoidMain(stringargs)SubMyClassobjSubClass=newSubMyClass();objSubClass.General();第8页,此课件共24页哦演示 public abstract class Player public abstract void Train();/抽象方法:训练public class FootballPlayer:Player public override void Train()Console.WriteLine(Football players are training.);public class SwimPlayer:Player public override void Train()Console.WriteLine(Swim players are training.);public class Sprinters:Player public override void Train()Console.WriteLine(Sprinters are training.);抽象类 不能实例化派生类 重写方法staticvoidMain(stringargs)FootballPlayerfPlayer=newFootballPlayer();fPlayer.Train();SwimPlayerswimPlayer=newSwimPlayer();swimPlayer.Train();Sprinterssprinters=newSprinters();sprinters.Train();第9页,此课件共24页哦抽象类抽象类1、声明一个抽象方法使用、声明一个抽象方法使用abstract关键字。关键字。2、一个类中可以包含一个或多个抽象方法。、一个类中可以包含一个或多个抽象方法。3、抽象类中可以存在非抽象的方法。、抽象类中可以存在非抽象的方法。4、抽象类不能被直接被实例化。、抽象类不能被直接被实例化。5、实现抽象类用、实现抽象类用“:”(冒号),实现抽象方法用(冒号),实现抽象方法用override关键字。关键字。6、抽象类可以被抽象类所继承,结果仍是抽象类。、抽象类可以被抽象类所继承,结果仍是抽象类。7、抽象方法被实现后,不能更改修饰符。、抽象方法被实现后,不能更改修饰符。第10页,此课件共24页哦多态多态多态就是父类定义的抽象方法,在子类对其进行实现之后,多态就是父类定义的抽象方法,在子类对其进行实现之后,C#允许将子类赋值给父允许将子类赋值给父类,然后在父类中,通过调用抽象方法来实现子类具体的功能。类,然后在父类中,通过调用抽象方法来实现子类具体的功能。上一例子中,教练说上一例子中,教练说“去训练吧去训练吧”,所有的运动员肯定会知道该怎么去做。,所有的运动员肯定会知道该怎么去做。第11页,此课件共24页哦多态和重载的区别多态和重载的区别重载,是指允许存在多个同名函数,而这些函数的参数不同。重载的实现是:,是指允许存在多个同名函数,而这些函数的参数不同。重载的实现是:编译器根据函数不同的参数表,对同名函数的名称加以修饰。对于编译器而编译器根据函数不同的参数表,对同名函数的名称加以修饰。对于编译器而言,这些同名函数就成不同的函数。它们的调用地址在编译期间就绑定了。言,这些同名函数就成不同的函数。它们的调用地址在编译期间就绑定了。多态,是指子类重新定义父类的虚函数。当子类重新定义了父类的虚函数后,父,是指子类重新定义父类的虚函数。当子类重新定义了父类的虚函数后,父类根据赋给它的不同的子类,动态调用属于子类的该函数,这样的函数调用在编类根据赋给它的不同的子类,动态调用属于子类的该函数,这样的函数调用在编译期间是无法确定的。译期间是无法确定的。不难看出,两者的区别在于编译器何时去寻找所要调用的具体方法,对于重载而不难看出,两者的区别在于编译器何时去寻找所要调用的具体方法,对于重载而言,在函数调用之前,编译器就已经确定了所要调用的方法,这称为言,在函数调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定早绑定”或或“静态绑定静态绑定”;而对于多态,只有等到函数调用的那一刻,编译器才会确定所;而对于多态,只有等到函数调用的那一刻,编译器才会确定所要调用的具体函数,这称为称为要调用的具体函数,这称为称为“晚绑定晚绑定”或或“动态绑定动态绑定”。第12页,此课件共24页哦示例示例staticvoidMain(stringargs)Playerp;p=newFootballPlayer();p.Train();p=newSwimPlayer();p.Train();p=newSprinters();p.Train();调用FootballPlayer类中Train方法调用SwimPlayer类中Train方法调用Sprinters类中Train方法第13页,此课件共24页哦演示publicclassAnimalpublicvirtualvoidEat()Console.WriteLine(Animaleat);publicclassCat:AnimalpublicoverridevoidEat()Console.WriteLine(Cateat);publicclassDog:AnimalpublicoverridevoidEat()Console.WriteLine(Dogeat);派生类 重写方法staticvoidMain(stringargs)Animalanimal;animal=newAnimal();animal.Eat();animal=newCat();animal.Eat();animal=newDog();animal.Eat();示例示例第14页,此课件共24页哦虚方法虚方法(virtual)和抽象方法和抽象方法(abstract)的区别的区别1.虚方法必须有实现部分,抽象方法没有提供实现部分,虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。能被实例化。publicabstractvoidEat();publicvirtualvoidEat()2.抽象方法只能在抽象类中声明,虚方法不是。其实如果抽象方法只能在抽象类中声明,虚方法不是。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。象的。3.抽象方法必须在派生类中重写,这一点跟接口类似,虚抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。方法不必。第15页,此课件共24页哦接口接口接口与抽象类非常相似,它定义了一些未实现的属性和方法。所有继承接口与抽象类非常相似,它定义了一些未实现的属性和方法。所有继承它的类都继承这些成员,在这个角度上,可以把接口理解为一个类的模它的类都继承这些成员,在这个角度上,可以把接口理解为一个类的模板。板。接口和抽象类的相似之处表现在以下两方面:接口和抽象类的相似之处表现在以下两方面:两者都包含可以由子类继承的抽象成员;两者都包含可以由子类继承的抽象成员;两者都不直接实例化。两者都不直接实例化。第16页,此课件共24页哦两者的区别表现在以下几个方面:两者的区别表现在以下几个方面:抽象类除拥有抽象成员之外,还可以拥有非抽象成员;而接口所抽象类除拥有抽象成员之外,还可以拥有非抽象成员;而接口所有的成员都是抽象的。有的成员都是抽象的。抽象成员可以是私有的,而接口的成员一般都是公有的。抽象成员可以是私有的,而接口的成员一般都是公有的。接口中不能含有构造函数、析构函数、静态成员和常量。接口中不能含有构造函数、析构函数、静态成员和常量。C#只支持单继承,即子类只能继承一个父类,而一个子类却能够只支持单继承,即子类只能继承一个父类,而一个子类却能够继承多个接口。继承多个接口。第17页,此课件共24页哦声明接口声明接口C#中声明接口的语法如下:中声明接口的语法如下:interface/interfacemembers接口的成员访问级别规定为接口的成员访问级别规定为public,因此,不用在声明成员时使用访问级别修饰,因此,不用在声明成员时使用访问级别修饰符。根据上面给出的语法,下面代码来声明这个符。根据上面给出的语法,下面代码来声明这个Ishape接口。接口。/接口:形状接口:形状/publicinterfaceIshapedoubleGetArea();第18页,此课件共24页哦接口接口classIBasevoidmethod1();intmethod2();intmethod3(float);/没有实现没有实现.接口接口cinterface只有方法声明没有实现第19页,此课件共24页哦示例示例第20页,此课件共24页哦publicclassRectangle:IshapepublicdoubledblWidth;/宽publicdoubledblHeitht;/高/构造函数publicRectangle(double_dblWidth,double_dblHeight)this.dblWidth=_dblWidth;this.dblHeitht=_dblHeight;/求矩形面积publicdoubleGetArea()returnthis.dblHeitht*this.dblWidth;第21页,此课件共24页哦publicclassCircle:IshapepublicdoubledblRadious;/半径/构造函数publicCircle(doubleradious)this.dblRadious=radious;/求矩形面积publicdoubleGetArea()returnMath.PI*this.dblRadious*this.dblRadious;第22页,此课件共24页哦publicclassTriangle:IshapepublicdoubledblEdge1;/边publicdoubledblEdge2;/边publicdoubledblEdge3;/边/构造函数publicRectangle(doubleedge1,doubleedge2,doubleedge3)this.dblEdge1=edge1;this.dblEdge2=edge2;this.dblEdge3=edge3;/求矩形面积publicdoubleGetArea()doublep=(dblEdge1+dblEdge2+dblEdge3)/2.0;doublearea=Math.Sqrt(p*(p-dblEdge1)*(p-dblEdge2)*(p-dblEdge3);returnarea;staticvoidMain(stringargs)IShapes;s=newRectangle(1,2);Console.WriteLine(s.GetArea();s=newTriangle(3,4,5);Console.WriteLine(s.GetArea();s=newCircle(1);Console.WriteLine(s.GetArea();第23页,此课件共24页哦关键字关键字sealed密封,顾名思义,就是由他修饰的类或方法将不能被继承密封,顾名思义,就是由他修饰的类或方法将不能被继承或是重写。或是重写。Sealed作用:作用:在类中使用在类中使用sealed,表示该类不能被继承;不能和,表示该类不能被继承;不能和abstract一起使用,二者冲突。一起使用,二者冲突。在方法中使用在方法中使用sealed,表示该方法不能被重写,必须和,表示该方法不能被重写,必须和override关键字一起使用关键字一起使用。第24页,此课件共24页哦

    注意事项

    本文(第5章抽象类多态和接口课件.ppt)为本站会员(石***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开