第8章 面向对象课件

第8章 面向对象课件

ID:5858146

大小:3.10 MB

页数:72页

时间:2017-12-14

第8章 面向对象课件_第1页
第8章 面向对象课件_第2页
第8章 面向对象课件_第3页
第8章 面向对象课件_第4页
第8章 面向对象课件_第5页
资源描述:

《第8章 面向对象课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章面向对象的高级程序设计内容简介本章将继续OOP的话题,着重讨论面向对象的核心机制——继承,并以此为基础介绍抽象类、多态、接口和委托等。继承是面向对象编程中实现代码重用的重要原理。通过继承,可以定义一个新类来扩展现有类。本章主要介绍继承性、多态性、接口、分部类、命名空间、委托和事件的相关知识。目录8.1继承性8.2多态性8.6事件8.7本章小结8.3接口与多态8.5委托8.4分部类与命名空间8.1继承性人们认识世界经常通过对事物分类的方式来进行,并且在分类时,根据类的包容和被包容关系来创建类的层次。例如,动物可以分为脊椎动物和无脊椎动物,脊椎动物又可以分为哺乳动物、鱼类、鸟

2、类、爬行动物和两栖动物……作为脊椎动物的人类,既有脊椎动物的一般特征,又有人类独有的特征。在OOP中使用继承时也是如此,既有继承也有扩展。8.1继承性继承涉及到一个基类型和一个派生类型,其中基类型表示的是泛例,而派生类型表示的是特例。特例从泛例中派生出来,也就是说特例继承了泛例。在这里,被继承的类叫基类(baseclass,也称为父类),继承后产生的类叫做派生类(derivedclass,也称为子类)。派生类是对基类的细化。派生类继承了基类中的类成员,它和基类之间的差异由编程人员来指定,指定方式有两种:一是在派生类中添加新的类成员(方法成员及数据成员),此时派生类包括从基类中继

3、承的成员和添加的新成员;二是根据需要,在派生类中修改继承来的方法成员的行为方式,为这些方法成员提供新的功能,或者更新基类中的属性、索引等。8.1继承性8.1.1继承的实现在C#中,派生类隐式地继承基类的所有成员,包括方法、字段、属性和事件(基类的私有成员、构造函数、析构函数除外),同时可以添加自己的成员来进行功能扩展。从一个基类派生一个子类的语法格式如下:【格式】[访问修饰符]class类名:基类列表{类的成员}【说明】冒号的意思是“派生于”,指明了是继承并作为基类列表的前缀;“基类列表”是一个用逗号分隔的列表,包括一个基类和任意数量的接口;一个类只能对单个类进行继承,但能继承

4、多个接口。8.1继承性8.1.1继承的实现基类的可访问性要大于派生类。例如,以下代码会产生一个编译错误。internalclassAclass{……}publicclassBclass:Aclass{……}下面是一个基类Person派生出子类Student类的例子,代码如下:publicclassPerson//这是一个基类{……//定义类成员}publicclassStudent:Person//这是一个派生类{……//扩展类成员}8.1继承性8.1.2隐藏基类成员如果在派生类中定义一个与基类同名的方法,派生类中的方法将隐藏基类中的同名方法。让派生类中的方法隐藏基类中的同名方

5、法,就应该使用new关键字显式声明。例如:publicclassB:A{//使用new关键字隐藏基类同名方法publicvoidnewMethod(){Console.WriteLine(“method()inB”);}}8.1继承性8.1.2隐藏基类成员注意:成员隐藏并不局限于方法成员,它也能用于数据成员和内部数据类型。而且,使用关键字new隐藏基类成员时,并不要求基类中的成员是虚拟的(virtual)。只要在派生类的某个成员前加关键字new就可以隐藏基类中对应的成员,它通常用于改写基类中的非虚拟方法。8.1继承性8.1.3base关键字C#中还提供了一个base关键字来表示

6、基类,通过它可以访问基类的成员。在派生类里,如果使用new隐藏某个基类成员,派生类中直接访问的就是它自己定义的成员。如果需要调用基类中被隐藏的成员,就必须使用关键字base。【例8-1】new与base应用示例。8.1继承性8.1.4派生类的构造函数构造函数用于初始化类的对象,与基类的其他成员不同,它不能被派生类继承。因此,创建派生类对象时,为了初始化从基类中继承来的成员,系统需要调用其基类的构造函数。【例8-2】调用基类的无参构造函数。8.1继承性8.1.4派生类的构造函数由例8-2的运行结果可知,C#编译器会自动在派生类构造函数中首先自顶向下地调用基类构造函数,以初始化从基

7、类中继承的成员,最后调用自身的构造函数。如果某个派生类中没有明确定义任何构造函数,编译器会自动为之生成一个默认构造函数,并在其中调用其基类构造函数。关于这一点,可以将例8-2中类Professor或Teacher的构造函数去掉试试。如果基类中没有无参构造函数或者希望调用带参数的基类构造函数,这种自动插入的调用显然不能满足需要,这时,就要使用关键字base来显式调用基类构造函数。8.1继承性8.1.4派生类的构造函数调用基类构造函数的语法格式如下:派生类构造函数名([参数列表1]):base(

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

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

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