c#课件抽象方法和抽象类_第1页
c#课件抽象方法和抽象类_第2页
c#课件抽象方法和抽象类_第3页
c#课件抽象方法和抽象类_第4页
c#课件抽象方法和抽象类_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

抽象方法和抽象类,多态性,在程序中同一符号或名字在不同情况下具有不同解释的现象称为多态性。表现在两方面:方法的重载。对象的上转型对象。子类可以改写父类的方法,而上转型对象(父类的对象)可以调用改写后的方法。不同的子类可能改写的内容不同。比如:动物类中的cry()方法,在子类“猫”中可以改写为“喵喵”,而在子类“狗”中可以改定为“汪汪”。猫类的和狗类的上转型对象在调用cry()方法时是各不相同的。,一个类可能会有很多的子类,这些子类中都有共同的行为,但行为的实现方法有所差异,为了迫使在编写子类时均实现这些方法,且保持统一的名称,可以事先在这些子类共同的父类中将方法的类型、名称、形参等确定下来,而方法体在子类中确定,对这种父类并不具体实现这些方法,而只定义了方法类型、名称、形参等的方法称为抽象方法,在定义时需在方法名称前加abstract,具有一个以上抽象方法的类称为抽象类,类名称前也要加修饰词abstract,,抽象方法和抽象类,抽象类是指不能被实例化的类,是派生类的基础,通过部分实面或不实现.抽象类可作为其它类的模板.声明抽象类的语法如下:abstractclass类名.1.抽象方法是隐式的虚方法.2.只允许在抽象类中声明抽象方法3.抽象方法声明不提供实际的实现,没有方法体,方法声明以一个分号结束,并在声明后没有大括号.例如:publicabstractvoidArea();,举例,举一个简单的例子,“图形”这个类是抽象的,它的成员方法“计算图形面积”也就没有实际的意义。面积只对“图形”的派生类比如“圆”、“正方形”这些非抽象的概念才有效,那么我们就可以把基类“图形”的成员方法“计算面积”声明为抽象的,具体的实现交给派生类通过重载来实现。分析:抽象类:图形,抽象方法求面积(指出:图形必须有求面积的方法,但因为不同图形求面积的方法不一样,因此将此方法声明为抽象方法)子类:正方形类,实现了抽象类中求面积的抽象方法。子类:圆,实现了抽象类中求面积的抽象方法。,abstractpublicclassDimensions/声明类Dimensions为抽象类protecteddoublex;publicconstdoublePI=Math.PI;publicDimensions(doublex)this.x=x;publicabstractdoubleArea();/在抽象类Dimensions中声明抽象方法Area()publicclassCircle:DimensionspublicoverridedoubleArea()/派生类Circle中必须使用override修饰符实现基类中的抽象方法Area()Console.WriteLine(该方法计算圆的面积);returnPI*x*x;publicclassSqure:DimensionspublicoverridedoubleArea()/派生类Squre中必须使用override修饰符实现基类中的抽象方法Area()Console.WriteLine(“该方法计算正方形的面积);return(x*x);,特征,抽象方法:只包含方法定义,但没有具体实现的方法,需要其子类或者子类的子类来具体实现。静态方法不能标记为override、virtual或abstract,即静态方法都必须是具体的抽象类:含有一个或多个抽象方法的类称为抽象类,在声明时,类名前须添加“abstract”关键字,但抽象类中可以包含非抽象方法抽象类不能够被实例化,这是因为它包含了没有具体实现的方法,即可实例化的类一定不是抽象类,不包含未具体实现的抽象方法。抽象方法不能是私有的,它必须为公共的。子类继承抽象父类后,可以使用override关键字覆盖父类中的抽象方法,并做具体的实现。也可以不实现抽象方法,留给后代实现,这时子类仍旧是一个抽象类,必须声明为abstract,抽象类的好处,当更新组件版本时,可根据需要将附加方法添加到基类,但抽象方法和属性必须保持不变。它可以很好的组织类的结构,举个例子。我们将人建模为一个抽象类,将人类共有的特性在抽象类中实现。而不同群体的人的不同特质则可以用派生类来体现。,abstract和virtual定义函数的区别,虚方法必须有实现部分,并为派生类提供了覆盖该方法的选项抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化/抽象方法publicabstractclassAnimalpublicabstractvoidSleep();publicabstractvoidEat();/虚方法publicclassAnimalpublicvirtualvoidSleep()publicvirtualvoidEat(),抽象方法只能在抽象类中声明,抽象方法必须在派生类中重写虚方法不是也不必要重写。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。publicclassAnimalpublicabstractvoidSleep();publicabstractvoidEat();编译器会报错:Main.cs(10):VSTest.Animal.Sleep()isabstractbutitiscontainedinnonabstractclassVSTest.AnimalMain.cs(11):VSTest.Animal.Eat()isabstractbutitiscontainedinnonabstractclassVSTest.Animal,3.抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。抽象方法不能声明方法实体而虚方法可以包含抽象方法的类不能实例化,而包含虚方法的类可以实例化!publicabstractclassAnimalpublicabstractvoidSleep();publicabstractvoidEat();publicclassCat:AnimalpublicoverridevoidSleep()Console.WriteLine(Catissleeping);/weneedimplementAnimal.Eat()here编译器会报错:Main.cs(14):VSTest.CatdoesnotimplementinheritedabstractmemberVSTest.Animal.Eat(),因为我们没有实现抽象类中所有抽象方法。,Virtual:当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassNamevariable=newClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。overrride:表示重写这个类是继承于Shape类publicoverridedoubleArea这个属性再shape中肯定存在但是这里我们不想用shape中的所以要重写virtual,abstract是告诉其它想继承于他的类你可以重写我的这个方法或属性,否则不允许。一个生动的例子:老爸表示基类(被继承的类)儿子表示子类(继承的类)老爸用virtual告诉儿子:孩子,你要继承我的事业,在这块上面可以自己继续发展你自己的儿子用override告诉全世界:这个我可不是直接拿我爸的,他只是指个路给我,是我自己奋斗出来的abstract:抽象方法声明使用,是必须被派生类覆写的方法,抽象类就是用来被继承的;可以看成是没有实现体的虚方法;如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法;抽象类不能有实体的。,小结,用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。abstract类必须被继承,abstract方法必须被重写。抽象类不能被实例化(直接创建对象)。抽象方法只需声明,而不需实现(无方法体)。,作业,按以下要求编写程序创建一个抽象的车类,包括各种车辆。至少包含一个抽象方法。成员变量:品牌、可载人数、轮子个数、能源等。抽象方法如:跑、加速、刹车等。通过继承车类重新声明公共汽车类和普通自行车类。在子类中实现父类中抽象方法构造方法对应区分为公共汽车和普通自行车。子类的构造方法中根据不同的类设置不同的默认值,如汽车类可以默认轮子个数是4个,可载人数50个,能源为汽油。,创建一个控制台应用程序,其中声明一个抽象类myClass,该抽象类中声明了两个属性和一个方法,其中,为两个属性提供了具体实现,方法为

温馨提示

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

评论

0/150

提交评论