面向对象编程:多态

面向对象编程:多态

ID:39750907

大小:356.51 KB

页数:21页

时间:2019-07-10

面向对象编程:多态_第1页
面向对象编程:多态_第2页
面向对象编程:多态_第3页
面向对象编程:多态_第4页
面向对象编程:多态_第5页
资源描述:

《面向对象编程:多态》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、目录第1章计算机、因特网、万维网和C#第2章VisualStudio.NET集成开发环境第3章C#编程介绍第4章控制结构(一)第5章控制结构(二)第6章方法第7章数组第8章基于对象的编程第9章面向对象编程:继承第10章面向对象编程:多态性第11章异常处理第12章图形用户界面概念(一)第13章图形用户界面概念(二)第14章多线程第15章字符、字符串和正则表达式第16章图形和多媒体第17章文件和流第18章数据库、SQL和ADO.NET第19章可扩展标记语言(XML)第20章ASP.NET、Web窗体和Web控件第21章ASP.NET和

2、Web服务第22章网络:基于流的套接字和数据包第23章数据结构和集合第24章可访问性第一部分.NET综述第二部分结构化编程第三部分面向对象编程第四部分C#相关应用第五部分C#应用扩展第10章面向对象编程:多态性10.1概述继承和多态都是开发复杂软件时要用到的重要技术。多态性能让我们编写出以常规方式来处理的大量相关类,并简化了向系统添加新的类和功能。有了多态性,就能设计和实现更容易扩展的系统。多态性定义派生类对象可以被视为基类对象来处理如果基类引用引用了一个派生类对象,就可以将这个基类引用转换为该对象实际的数据类型,并将该对象作为这

3、种实际的数据类型来处理。引用在程序中的体现是“=”请看代码代码演示了如何将派生类对象分配给基类引用,然后通过强制类型转换,将基类引用转换为派生类引用。10.2派生类对象转换为基类对象第21行代码将circle1(一个派生类对象的引用)分配给point2(一个基类的对象的引用)。在C#中,由于继承是“属于”关系,所以可以将一个派生类对象分配给一个基类对象。反之则很危险。第23、24行中,当C#碰到一个virtual(虚拟)方法调用(如ToString方法)时,它会根据被调用方法的对象类型(而不是引用该对象的引用类型)来判断被调用方法

4、的版本。本例中,point2引用了一个Cricle对象,所以C#调用了Circle的ToString方法,而不是Point的ToString方法。这个调用哪个方法的判断便是多态性的一个例子。staticvoidMain(string[]args){Pointpoint1=newPoint(30,50);Circlecircle1=newCircle(120,89,2.7);Pointpoint2=circle1;//1、基类引用派生类对象output+=point2.ToString();//访问的是Circle类的ToStrin

5、g方法Circlecircle2=(Circle)point2;//2、基类引用可以转换为派生类引用if(point1isCircle)//判断左操作符类型是否与右操作符一致{circle2=(Circle)point1;//无法将基类对象直接转化为派生类对象}}部分代码基类引用和派生类引用与基类对象和派生类对象有4种组合方式:1、用基类引用来引用基类对象;2、用派生类引用来引用派生类对象;3、用基类引用来引用派生类对象;4、用派生类引用无法直接引用基类对象。需要的过程为:首先定义基类引用来引用派生类对象,然后将基类引用转换为派生

6、类引用。对于大型程序中的对象,判断其类型的方法之一式使用switch结构。但是,使用switch逻辑会使程序面临各种各样的问题。多态性编程可以消除不必要的switch逻辑。使用C#的多态性机制来执行对应的逻辑,程序员可以避免与switch逻辑相关的常见错误。10.3类型字段和switch语句10.4多态性示例SpaceObjectDrawYourself()PlutonianDrawYourself()VenutianDrawYourself()SpaceShipDrawYourself()LaserBeamDrawYoursel

7、f()MartianDrawYourself()定义从没有打算实例化任何对象的类,称为抽象类。通常作为基类,一般称为抽象基类。抽象类通常包含一个或多个抽象方法或者抽象属性。对类而言,如果对象可以从它那里被实例化,可以把这样的类称为具体类。10.5抽象类和方法关键字abstract用于将方法和属性声明为抽象。被声明为abstract的方法和属性不会提供实现部分——试图这样做是语法错误。每个具体的派生类都必须覆盖基类的所有抽象方法和属性(利用关键字override),并提供这些方法和属性的具体实现部分。其中包含抽象方法的任何类都必须被

8、声明为abstract。抽象方法和虚拟方法的区别在于:虚拟方法有一个实现部分,并为派生类提供了覆盖该方法的选项;相反,抽象方法没有提供实现部分,强制派生类覆盖方法(否则派生类不能成为具体类)。多态性特别适用于实现分层式软件系统。在面向对象的编程中,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。