- 1、本文档共211页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 C#面向对象高级编程 前面介绍了面向对象程序设计的基本概念和应用。但是面向对象还包括很多其他重要的概念。本章将深入分析面向对象编程的概念,并详细说明利用工具进行面向对象程序设计的方法。 4.1 类的继承与多态 4.1.1 继承 1、概述 现实世界中的许多实体之间不是相互孤立的,它们往往具有共同的特征,也存在内在的差别。人们可以采用层次结构来描述这些实体之间的相似之处和不同之处。 为了用软件语言对现实世界中的层次结构进行模型化,面向对象的程序设计技术引入了继承的概念。一个类从另一个类派生出来时,派生类从基类那里继承特性。派生类也可以作为其它类的基类。从一个基类派生出来的多层类形成了类的层次结构。 注意:C#中,派生类只能从一个类中继承。这是因为,在C++中,人们在大多数情况下不需要一个从多个类中派生的类。从多个基类中派生一个类,这往往会带来许多问题,从而抵消了这种灵活性带来的优势。 C#中,派生类从它的直接基类中继承成员:方法、域、属性、事件、索引指示器。除了构造函数和析构函数,派生类隐式地继承了直接基类的所有成员。 C#中,派生类从它的直接基类中继承成员:方法、域、属性、事件、索引指示器。除了构造函数和析构函数,派生类隐式地继承了直接基类的所有成员。 程序清单: using System; namespace ConsoleApplication1 { class Vehicle //定义汽车类 { int wheels; //公有成员:轮子个数 protected float weight; //保护成员:重量 public Vehicle(){;} public Vehicle(int w, float g) { wheels=w; weight=g; } public void Speak() { Console.WriteLine(the w vehicle is speaking!); } } class Car: Vehicle //定义轿车类:从汽车类中继承 { int passengers;//私有成员:乘客数 public Car(int w, float g, int p) : base(w,g) { wheels=w; weight=g; passengers=p; } } } Vehicle作为基类,体现了“汽车”这个实体具有的公共性质:汽车都有轮子和重量。 Car类继承了Vehicle的这些性质,并且添加了自身的特性:可以搭载乘客。 C#中的继承符合下列规则: (1)继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。 (2)派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去己经继承的成员的定义。 (3)构造函数和析构函数不能被继承。除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。基类中成员的访问方式只能决定派生类能否访问它们。 (4)派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖己继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。 (5)类可以定义虚方法、虚属性以及虚索引指示器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。 2、覆盖 我们上面提到,类的成员声明中,可以声明与继承而来的成员同名的成员。这时我们称派生类的成员覆盖(hide)了基类的成员。这种情况下,编译器不会报告错误,但会给出一个警告。对派生类的成员使用new关键字,可以关闭这个警告。 前面汽车类的例子中,类Car继承了Vehicle的Speak()方法。我们可以给Car类也声明一个Speak()方法,覆盖Vehicle中的Speak,见下面的代码。 程序清单: using System; namespace ConsoleApplication1 { class Vehicle//定义汽车类 { public int wheels; //公有成员:轮子个数 protected float weight;//保护成员:重量 public Vehicle(){;} public Vehicle(int w, float g) { wheels=w; weight=g; } public void Speak() { Console.WriteLine(the w vehicle
您可能关注的文档
- C#网络应用编程 第2版 教学课件 作者 马骏 第05章 TCP应用编程.ppt
- C#网络应用编程 第2版 教学课件 作者 马骏 第06章 UDP应用编程.ppt
- C#网络应用编程 第2版 教学课件 作者 马骏 第07章 FTP应用编程.ppt
- C#网络应用编程 第2版 教学课件 作者 马骏 第08章 HTTP应用编程.ppt
- C#网络应用编程 第2版 教学课件 作者 马骏 第09章 SMTP与POP3应用编程.ppt
- C#网络应用编程 第2版 教学课件 作者 马骏 第10章 P2P应用开发技术.ppt
- C#网络应用编程 第2版 教学课件 作者 马骏 第11章 数据加密与数字签名.ppt
- C#网络应用编程 第2版 教学课件 作者 马骏 第12章 网络应用开发综合实例.ppt
- C#网络应用编程 第2版 习题答案作者 马骏 第01章 概述习题解答.doc
- C#网络应用编程 第2版 习题答案作者 马骏 第02章 进程与线程习题解答.doc
文档评论(0)