第四章 继承与多态课件

上传人:我*** 文档编号:139323781 上传时间:2020-07-21 格式:PPT 页数:24 大小:106.50KB
返回 下载 相关 举报
第四章 继承与多态课件_第1页
第1页 / 共24页
第四章 继承与多态课件_第2页
第2页 / 共24页
第四章 继承与多态课件_第3页
第3页 / 共24页
第四章 继承与多态课件_第4页
第4页 / 共24页
第四章 继承与多态课件_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《第四章 继承与多态课件》由会员分享,可在线阅读,更多相关《第四章 继承与多态课件(24页珍藏版)》请在金锄头文库上搜索。

1、第 4 章继承和多态,简介,为了提高软件模块的可复用性和可扩张性,以便提高软件的开发效率,我们总是希望能够利用前人或自己的开发成果,同时又希望在自己的开发过程中能够有足够的灵活性,不拘泥于复用的模块。 今天,任何面向对象的程序设计语言都必须提供两个重要的特性:继承性(inheritance)和多态性(polymorphism)。,目录,4.1类的继承 4.2重写和多态性 4.3抽象类和抽象方法 4.4密封类和密封方法 4.5静态类和静态方法,4.1类的继承-派生类的声明格式,继承是OOP(Object Oriented Programing)的一个重要特征,它允许在已有类的基础上创建新类,新类

2、不但从既有类中继承类成员,而且可以重新定义或加进新成员。被继承(也称为被派生)的类为基类或父类,继承后产生的类为派生类或子类。 注意,C#中的派生类只能直接继承于一个基类,当然基类也可以有自己的基类。,类的继承与派生,保持已有类的特性而构造新类的过程称为继承。 在已有类的基础上新增自己的特性而产生新类的过程称为派生。 被继承的已有类称为基类(或父类)。 派生出的新类称为派生类。,继承与派生的目的,继承的目的:实现代码重用。 派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。 派生的过程:吸收已有类成员;调整已有类成员;添加新的类成员。,派生类的声明格式,

3、派生类的声明格式如下: 类修饰符 class 类名:基类 类体 ,派生类的注意事项,只允许单继承,即派生类只能有一个基类 继承可传递,即,A派生出B,B又可派生出C 派生类可扩展它的直接基类,但不能删除从基类继承的成员 构造函数和析构函数不能被继承 派生类可以隐藏(new)基类的成员:如果在派生类中声明了与基类同名的新成员时,则该基类的成员在派生类中就不能被访问(但可以用base访问),派生类的声明格式,【例 4-1】 现有一个Animal类,由Animal类派生一个Dog类。由于Dog除了具有自身的特有性质,还有Animal的所特有性质,所以可用继承的方法来重用Animal类。代码如下,该代

4、码位于Chap4-1中。 请参考书本实例介绍 注意:派生类不能访问基类中的私有成员,但可以访问其公共成员。若允许一个成员可由基类和派生类访问,但不能由外部的代码访问,则可使用protected修饰符将其声明为保护成员。,继承过程中修饰符变化,(1)基类中的public成员:( 类内可见,类外可见) 在派生类中变为: public (派生类内可见,派生类外可见) (2)基类中的private成员: (基类内可见,基类外不可见) 在派生类中变为:unaccessble (派生类内不可见,派生类外不可见) (3)基类中的protected成员:(类内可见,类外不可见) 在派生类内变为:protect

5、ed (派生类中可见,派生类外不可见),隐藏基类方法,当派生类从基类继承时会获得基类的所有方法、字段、属性和事件。 若要更改基类的数据和行为,有两种选择: 一是在派生类中使用new关键字隐藏基类中的同名成员。 二是重写虚拟的基类成员。 (基类:virtual; 派生类:override),同名方法的调用,基类内:调用基类同名方法 基类外(基类对象):调用基类同名方法 派生类内: 调用派生类同名方法,通过base调用基类同名方法。 派生类外(派生类对象): 调用派生类同名方法。,base关键字,在C#中可以使用base关键字从派生类中访问基类的成员。 使用base的一种情形是调用基类上已被其他方

6、法重写的方法; 另一种情形是指定创建派生类示例时应调用的基类构造函数。,派生类构造函数,满足构造函数的基本特征 派生类构造函数构造原则: (1)基类中的字段交给基类构造函数 (2)初始化新添加字段。 格式: public 派生类名(总参列表):base(参数列表) 新成员初始化,重写与隐藏的区别,语法区别: 隐藏: 基类方法不做申明,在派生类中使用new声明。 重写: 基类方法声明为virtual(虚方法),派生类中使用override申明重写。 调用区别 C#隐藏时,通过父类变量调用子类对象则使用父类的方法,通过子类变量调用子类对象则使用子类方法。 C#重写时,通过父类、子类变量调用子类对象

7、皆使用子类的重写方法;,隐藏与重写的调用规则,= =,Bb Aa,newB(); b;,隐藏:向左看齐(向栈看齐),重写:看右看齐(向堆看齐),C#隐藏(new)示例:,classTest staticvoidMain(stringargs) Bb=newB(); b.F(); Aa=b; a.F(); 输出为 B.F A.F,usingSystem; classA publicvoidF() Console.WriteLine(A.F); classB:A newpublicvoidF() Console.WriteLine(B.F); ,C#重写virtual(虚方法)示例,classTe

8、st staticvoidMain() Bb=newB(); b.F(); Aa=b; a.F(); 输出为 B.F B.F,usingSystem; classA publicvirtualvoidF() Console.WriteLine(A.F); classB:A publicoverridevoidF() Console.WriteLine(B.F); ,多态性,多态性是指不同对象收到相同消息时会产生不同动作。 C#支持两种多态性: 第一种是编译时的多态性,这种多态性是通过方法重载和操作符重载来实现的; 第二种是运行时的多态性,这种多态性是指系统直到运行时才根据实际情况决定采用何种操

9、作,通过重写来实现。,4.3抽象类和抽象方法,使用abstract 修饰符声明的类和方法称为抽象类和抽象方法。抽象类不能示例化,只能作其他类的基类使用。抽象类和抽象方法具有以下特性: 抽象类可以包含抽象方法和抽象属性。 不能用 sealed修饰符修改抽象类,因为抽象类只能做基类使用。 从抽象类派生的非抽象类必须实现所有继承来的抽象方法和抽象访问器。 抽象方法是隐式的虚方法。,4.3抽象类和抽象方法,抽象类和抽象方法具有以下特性(续) 只允许在抽象类中使用抽象方法声明。 因为抽象方法声明不提供方法的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ( )。 在派生类中使用

10、关键字override实现抽象方法。 在抽象方法声明中不允许使用static或virtual修饰符。,4.4密封类和密封方法,使用sealed修饰符修饰的类称为密封类。 密封类不能被其他类继承 密封类与抽象类是互斥的,即修饰符abstract和sealed不能同时使用。 方法和属性也可用sealed关键字修饰,表示该方法或属性不允许被继承,只有当使用override重写方法或属性时时才能使用sealed关键字。,4.5静态类和静态方法,使用static关键字声明的类称为静态类。 静态类与非静态类的的一个主要区别是:静态类不能实例化。(使用方法:类名.方法名() 此外,静态类还具有以下特征: 静态类只能包含静态成员 静态类是密封的,就是说静态类不能被继承。 静态类不能使用abstract或sealed修饰符。 静态类不能包含实例构造函数,4.5静态类和静态方法,静态类具有以下特征(续) 静态类不能有任何实例成员,但可以有常量成员 静态类的成员默认并不是static类型的,必须用static修饰符显示声明成员,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号