.类的多态性.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.类的多态性.ppt

第7课 类的多态性 上一课的示例Poin-Cirlce3-Cylinder,我们简单演示了类的多态性。 多态性是一个面向对象的概念,它允许以相似的方式来对待所有的派生类,尽管这些派生类是各不相同的。创建派生类的目的是为了获得更多的特殊功能。 在Poin-Cirlce3-Cylinder示例中,计算圆面积的方法与计算圆柱体的表面积的方法是不相同的,但都可以通过Area( )方法进行计算,不同对象的Area( )方法是不相同的,但对于调用者来说,使用很方便(既可以用派生类调用Area( )方法,也可以用基类调用Area( )方法),因为调用者无需知道计算细节有何不同。 7.1 基本概念 所谓多态,就是把派生类对象当成基类对象来使用。换句话说,就是认为派生类对象是(is a)一种基类对象。 把派生类对象当成基类对象来使用,就是“多态”技术的核心。 多态的实现方式有以下几种: 虚方法 抽象方法 接口 7.2 虚方法 如果希望基类中的某个方法能够在派生类中进一步得到改进,那么可以把这个方法定义为虚方法。 虚方法就是能在派生类中能够对其实现进一步改进的方法。 在基类的定义中,通过virtual关键字来说明该方法为虚方法。 在派生类的定义中,如果要重写基类的虚方法,使用override关键字。 多态性测试 7.3 抽象方法 基类中定义的虚方法,派生类可以重新以新的方式实现(使用override关键字),也可以不提供实现,这时,调用的是基类的实现方法。 有时,在基类定义中,基类不提供实现方法,而要求派生类必须实现该方法。这时,可以使用抽象方法。 在定义基类方法时,使用abstract关键字,可以定义抽象方法。 抽象方法是一个没有被实现的空方法。 含有抽象方法的类是抽象类,只能由派生类来继承,而不能用来实例化对象。相当于定义了一个模板。 并不要求抽象类必须包含抽象成员。含有抽象成员的类一定是抽象类。抽象类可以包含非抽象成员。 7.2 抽象类 抽象方法 注意: 抽象方法的声明不提供方法体,抽象属性的声明不提供属性访问器。例如: 抽象方法: public abstract double Area(); 抽象属性: public abstract string Name { get; } 实现抽象类 在实现抽象类时,必须实现该类中的每一个抽象(abstract)方法、属性。 每个已实现的方法或属性必须和抽象类中指定的方法或属性一样。(接受相同数目和类型的参数,具有同样的返回值) 实现抽象方法、抽象属性的方法和属性必须有override修饰符 相关知识点 抽象类的特性 抽象方法是隐式的virtual方法 只允许在抽象类中使用抽象方法声明 抽象方法声明不提供实现,即只有分号没有大括号{} 如,public abstract double Area(); 实现由override方法提供,它是非抽象类的成员。 抽象方法声明不能使用static、virtual和override,private修饰 知识点(2) 可以用来定义数组,但不能用new运算符创建数组元素。 Shape[]shape=new Shape[4]; //正确 shape[0]=new Shape(); circle circle1=new circle(10); Cylinder cylinder1=new Cylinder(6,20); shape[0]=circle1; //正确 shape[1]=cylinder1; //正确 知识点(3) 判断运行时变量的实际类型。 is运算符用于检查表达式是否是指定的类型,如果是,结果为true,否则结果为false。 public static string ShowShapinfo(Shap[] Items) { string output=“”; foreach(Shape Item in Items) { output+=“\n”+item.Name+”:”+Item.ToString() +”面积”+string.Format(“{0:n2}”,Item.Area()); if(Item is Cylinder) output+=“体积”+string.Format(“{0:n2}”,Item.Volume()); } return output; } 7.1.2 抽象类继承 抽象类可以完全实现,但更常见的是部分实现或者根本不实现,从而封装继承类的通用功能。抽象类

文档评论(0)

000 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档