c#类的继承.ppt_第1页
c#类的继承.ppt_第2页
c#类的继承.ppt_第3页
c#类的继承.ppt_第4页
c#类的继承.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,第5章,继承及多态性,5.1 类的继承 5.2 多态性 5.3 抽象类和抽象方法 5.4 接口,第五章 继承及多态性,本章学习目标:,了解继承的概念、了解Object类,掌握继承的使用方法 了解作用域、构造函数和继承的关系 掌握抽象类和抽象方法、掌握多态性 掌握接口的概念及定义方法,5.1 类的继承,第五章 继承及多态性,面向对象的三大特点,封装性 继承性 多态性,封装的优点: 第一、良好的封装能够减少耦合; 第二、类内部的实现可以自由地修改; 第三、类具有清晰的对外接口,5.1 类的继承,第五章 继承及多态性,面向对象的三大特点,封装性 继承性 多态性,5.1 类的继承,第五章 继承及多态

2、性,图5.1.1 独立定义的电话卡类,无继承时的重复和冗余,5.1 类的继承,第五章 继承及多态性,继承的概念,图5.1.2 使用继承定义的电话卡类,当一个类A能够获取另一个类B中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系。被继承的类B称为父类或超类,继承了父类或超类的数据和操作的类A称为子类。,5.1 类的继承,第五章 继承及多态性,继承的概念,public class Cat private string name; public Cat(string name) = name; public void Sound() Mess

3、ageBox.Show(“我的名字叫“+name+”,喵”); ,Cat mycat = new Cat(“加菲”); mycat.Sound();,改为“汪”,改为Dog,Dog mydog = new Dog(“旺财”); mydog.Sound();,代码重复,5.1 类的继承,第五章 继承及多态性,继承的建立,继承就是在现有类的基础上建立新类的过程。,5.1 类的继承,第五章 继承及多态性,继承的关系,交通工具,汽 车,船,飞 机,汽艇,轮船,轿车,客车,战斗机,客机,一个父类可以拥有多个子类,一个派生类也可以成为其他类的基类。,5.1 类的继承,单继承和多继承,,,图5.1.3 单继

4、承和多继承,单继承:指任何一个类都只有一个单一的父类,即派生类是由一个且只能是一个基类创建,Visual C#只支持单继承。,多继承:指一个类可以有一个以上的父类。它的静态的数据属性和操作从所有这些父类中继承。,第五章 继承及多态性,Text,Text,Text,语法格式:,访问权限 class : /派生类定义 ,5.1 类的继承,继承的实现,第五章 继承及多态性,Text,Text,Text,语法格式:,访问权限 class : /派生类定义 ,5.1 类的继承,继承的实现,第五章 继承及多态性,Text,Text,Text,5.1 类的继承,继承的实现,public class Anim

5、al public string name; public Animal(string name) = name; public void Sound() MessageBox.Show(“动物“+name+”在叫“); ,public class Cat:Animal public Cat(string name):base(name) ,public class Dog:Animal public Dog(string name): base(name) ,基类:Animal,派生类:Cat,派生类:Dog,第五章 继承及多态性,protected访问修饰符允许子类访问

6、,父类成员,public修饰,所有类都可以访问,private修饰,子类无法访问,5.1 类的继承,protected修饰符,第五章 继承及多态性,在派生类中使用基类成员,使用 base 关键字调用基类的构造函数,5.1 类的继承,使用 base 关键字调用父类的属性和方法,第五章 继承及多态性,在派生类中使用基类成员,使用 base 关键字调用基类的构造函数,public class Animal public string name; public Animal(string name) = name; public class Cat : Animal public

7、int age; public Cat(string name, int age): base(name) this.age = age; ,5.1 类的继承,5.1 类的继承,第四章 面向对象程序设计,继承的规则,继承是可传递的。 如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员, 同样也继承了A中的成员。Object类作为所有类的基类。 派生类应当是对基类的扩展。 派生类可以添加新的成员,但不能除去已经继承的成员的定义。 构造函数和析构函数不能被继承。 除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。 基类中成员的访问方式只能决定派生类能否访问它们。 派生类

8、如果定义了与继承而来的成员同名的新成员,就可以 覆盖已继承的成员。 但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。,继承描述了“是什么种类” ( is a kind of)的关系 派生类从基类继承属性和方法,实现了代码重用 派生类变得更专门化,父类,子类,动物,5.1 类的继承,继承的优点,第五章 继承及多态性,5.1 类的继承,第五章 继承及多态性,基类Object,所有类的最高父类:Object,最具代表性的成员方法:ToString(),5.1 类的继承,第五章 继承及多态性,继承中的构造函数,派生类不能继承基类的构造函数,创建派生类的对象时,先执行基类的构造函数,再执行派

9、生类 的构造函数,class Animal public string name; public Animal() Console.WriteLine(“执行基类Animal的构造函数”); ,class Cat:Animal public Cat() Console.WriteLine(“执行派生类Cat的构造函数”); ,第五章 继承及多态性,5.1 类的继承,课堂练习,设计一个类,电话类Telephone作为基 类,并在此基础上派生出Mobilephone类,两个类的成员如右侧类图所示。,5.1 类的继承,第五章 继承及多态性,面向对象的三大特点,封装性 继承性 多态性,5.2 多态性,

10、第五章 继承及多态性,多态性,class Animal public void Eat() Console.WriteLine(Eat something); class Cat : Animal public new void Eat() /暂时覆盖基类的方法 Console.WriteLine(Eat small fishes); ,5.2 多态性,第五章 继承及多态性,隐藏基类的成员,new关键字表示在派生类中定义一个新的同名方法,将隐藏基类中的成员,当在派生类中创建与基类中的方法或数据成员同名的方法或数据成员时,原来基类中的方法或成员将被隐藏掉。,隐藏继承成员,Cat mycat =

11、new Cat(); mycat.Eat(),输出:Eat small fishes,5.2 多态性,第五章 继承及多态性,编写虚方法,public class Animal public virtual void Eat() Console.WriteLine(Eat something!); public class Cat : Animal public override void Eat() /完全取代基类代码 Console.WriteLine(Eat small fishes!); ,基类的方法加上关键字virtual后变成虚方法,才可以被重写,从而实现面向对象最重要的特征-多态性

12、,即基类可以使用派生类的方法。,5.2多态性,第五章 继承及多态性,new与override的区别,public class Animal public virtual void Eat() Console.WriteLine(Eat something); public class Cat : Animal public override void Eat() /完全取代基类方法 Console.WriteLine(Eat small fishes!); public class Dog : Animal public new void Eat() /暂时覆盖基类方法 Console.Wri

13、teLine(Eat bones); ,Animal mycat=new Cat(); Animal mydog=new Dog(); mycat.Eat(); mydog.Eat();,输出结果:,5.3抽象类和抽象方法,第五章 继承及多态性,/动物类 public class Animal public string name; public virtual void Sound() ,/派生类Cat: public class Cat : Animal public override void Sound() Console.WriteLine(mi!mi!mi!); ,Sound方法很

14、少有可能被调用到,5.3抽象类和抽象方法,第五章 继承及多态性,抽象类、方法的概念,在基类中的虚方法有时候不可能被调用到,而只是表达 一种抽象的概念,用以为它的派生类提供一个公共的界面。 C#中引入了抽象类(abstract class)的概念,可以将它 定义成抽象方法。将该方法所在的类定义成抽象类。,5.3抽象类和抽象方法,第五章 继承及多态性,抽象方法,只包含方法定义,但没有具体实现的方法,需要 其子类或者子类的子类来具体实现。,public abstract double Area();,public abstract void Sound();,5.3抽象类和抽象方法,第五章 继承及多

15、态性,抽象类,抽象类是能够包含抽象成员的类。,抽象类只能作为基类使用,不能被实例化(创建对象)。,public abstract class Animal public abstract void Sound(); Animal animal=new Animal();,1. 创建抽象类Shape,声明求面积的抽象方法GetArea() ; 2. 创建子类,矩形,重写基类的GetArea()方法; 3创建子类,圆形,重写基类的GetArea()方法; 4创建应用程序,创建矩形、圆形对象,分别进行计算。,课堂练习,5.3抽象类和抽象方法,第五章 继承及多态性,第五章 继承及多态性,抽象类和抽象方

16、法的使用规则,抽象类只能作为其它类的基类,它不能直接被实例化。 它只能作为基类使用。 一个类中可以包含一个或多个抽象方法,但不是必须的。 抽象类中可以存在非抽象的方法,抽象方法必须包含在抽象类中。 实现抽象方法用override关键字。如果子类没有实现抽象基类中所有的抽象方法,则子类也必须定义成一个抽象类。 抽象类可以被抽象类所继承,结果仍是抽象类。 抽象方法被实现后,不能更改修饰符。,5.3抽象类和抽象方法,5.4接口,第五章 继承及多态性,接口(Interface),U盘,移动硬盘,图5.4.1 USB接口,接口是一套规范,满足这个规范的设备,我们就可以把它们组装到一起,从而实现该设备的功

17、能。,5.4接口,第五章 继承及多态性,接口的概念,C#中,接口用来定义一种程序的协定。通俗地说,接口就是 说明一个类“能做什么”。实现接口的类或者结构要与接口的定 义严格一致。,interface Iflyable /定义接口 void fly(); ,class Plane : Iflyable /实现接口 public void fly() Console.WriteLine(“飞机会飞!); ,class Bird : Iflyable /实现接口 public void fly() Console.WriteLine(“鸟类会飞!); ,5.4接口,第五章 继承及多态性,接口的声明,

18、语法形式:,interface Iflyable /定义接口 void fly(); void start(); ,只有声明,没有实现,没有成员变量,interface IShape /定义接口 public string name; public void Draw() ,不可设置访问权限,5.4接口,第五章 继承及多态性,接口举例,实例5.4.1:接口的使用,FLY,飞机使用引擎和机翼飞行,鸟类使用翅膀飞行,超人握紧拳头,举起双手飞行,5.4接口,第五章 继承及多态性,接口的实现,一个类可以同时继承其他类和实现多个接口。,接口的棒棒糖表示法,图5.4.2 继承和接口的UML表示,5.4接口,第五章 继承及多态性,接口的实现,5.4接口,第五章 继承及多态性,课堂练习,请根据以下的UML图写出图中所有内容的代码。,5.4接口,第五章 继承及多态性,接口小结,类是对象的抽象、抽象类是对类的抽象、接口是对行为的抽象 一个接口定义一个协定,使用者和实现者之间的协定 更多时候,接口表现出对外提供的服务,故没有成员变量 接口可以用来解决多重继承的问题 从形式上看,接口是没有成员变量的抽象类,但语义上讲不通 如果行为跨越不同类的对象,可使用接口,本章作业:,一、简答题 1. 请举例说明继承的特点。 2. 什么是抽象类?它有哪

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论