C#程序设计课件第6章继承及多态性_第1页
C#程序设计课件第6章继承及多态性_第2页
C#程序设计课件第6章继承及多态性_第3页
C#程序设计课件第6章继承及多态性_第4页
C#程序设计课件第6章继承及多态性_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1,第6章 继承及多态性,继承性是从现有的类中派生出新类的功能,它能分析多态性的细微差别,并允许创建类层次结构,使用继承可以创建一个定义了多个相关项目共有特性的通用类;异常是C#中处理错误的机制。,2,本章学习要点,了解继承的概念 掌握继承的使用方法 了解作用域和继承的关系 掌握抽象类 掌握重写成员 了解构造函数和继承的关系 掌握多态性 掌握异常处理,3,6.1 继承,继承是面向对象程序设计中一个很重要的特性,它是关于一个类怎么从另一个类中共享特性和行为的术语。在C#中继承类称为派生类或子类,被继承类称为基类或父类。如果一个派生类继承一个基类,那么这个派生类会从其基类中继承得到所有的操作、属性、特性、事件以及这些内容的实现方法,而基类中实例构造函数、析构函数和表态构造函数不会被继承,同时也不会继承那些显式拒绝访问的成员。 派生类能够继承基类的方法、特性等,但继承得到的成员也受作用域的限制,即使派生类继承得到基类成员,也可能无法访问。,继承,public class Person public string Name; public void WriteInfo() Console.WriteLine(“我是人的方法“); ,public class Student:Person public string SchoolName; ,基类,static void Main(string args) Student s=new Student(); s.WriteInfo(); Console.ReadLine(); ,无需重新编写代码,派生类,狗,马,继承,动物,基类,派生类,继承的层次结构示例,Class Animal / 成员变量 int eyes, nose; Animal() eyes = 2; nose = 1; Pet_Animal() / 定义 ,基类,Class Dog : Animal / 成员变量 / 成员函数 private Barking() / 定义 private Wagging_Tail() ,派生类,继承 C# 中的类,public class Graduate: Student, Employee / 成员变量 / 成员函数 ,多重继承,允许多重接口实现,base 用于从派生类中访问基类成员 可以使用 base 关键字调用基类的构造函数 this 用于调用本类的数据成员或方法 也可以不写,关键字 base和this,构造函数,构造函数不能继承 在实例化子类对象时,会默认调用父类构造函数 如果父类有多个构造函数,子类会默认调用无参的构造函数 如果需要调用有参的默认函数,需要显示指明 需要使用base关键字,调用 base 构造函数,public class Student:Person /调用 Person 构造函数 public Student(string name):base(name) Console.WriteLine(“这是子类的构造函数”); ,:base 关键字将调用 Person 类构造函数,public class Person public Person() Console.WriteLine(“我是人的构造方法“); ,public class Student:Person public Student() Console.WriteLine(“我是学生的构造方法“); ,还将调用 Base 构造函数,static void Main(string args) Student s=new Student(“hehe“); Console.ReadLine(); ,关键字 override和virtual,public class Person public virtual void WriteInfo() Console.WriteLine(“我是人的方法“); ,public class Student:Person public override void WriteInfo() Console.WriteLine(“我是学生的方法“); ,基类,派生类,base 方法的新实现,相同方法,new,隐藏继承成员,将执行基类的虚拟方法,关键字 new,抽象类和抽象方法,abstract class Person /类实现 ,访问修饰符,只能用作被继承,不能实例化,public abstract class Person public abstract void WriteInfo(); public void Work() Console.WriteLine(“人正在工作“); ,抽象方法,public class Student:Person public override void WriteInfo() Console.WriteLine(“我是学生的方法“); ,抽象类,子类,提供,重写方法,原型,必须重写,抽象类和抽象方法,接口,如果把抽象类中的方法全部变成虚方法,把数据成员全部去掉,抽象类就变成了接口 接口的作用是为了提供更高层次的抽象 用接口可以实现多继承 接口的语法格式: public interface Person void WriteInfo(); void Work(); ,public interface Person void WriteInfo(); void Write(); ,隐式声明为 public,无访问修饰符,接口,public class Student:Person public void WriteInfo() Console.WriteLine(“我是学生的方法“); public void Work() Console.WriteLine(“学生正在学习“); ,static void Main(string args) Student s=new Student(); s.WriteInfo();,派生自 Person接口,多重接口实现,C# 不允许多重类继承 但 C# 允许多重接口实现 这意味着一个类可以实现多个接口,演示:示例 11,public interface Person void WriteInfo(); void Work(); interface Monkey void Climb(); public class MonkeyPerson:Monkey,Person public void WriteInfo() Console.WriteLine(“我是猿人的方法“); public void Work() Console.WriteLine(“猿人正在打猎“); public void Climb() Console.WriteLine(“猴子在爬树“); ,static void Main(string args) MonkeyPerson mp=new MonkeyPerson(); mp.Work(); mp.Climb(); Console.ReadLine(); ,显式接口实现,在 C# 中,只要不发生命名冲突,就完全可以允许多重接口实现,public interface Person void work(); ,public interface Monkey void work(); ,public class MonkeyPerson:Monkey,Person void Person.Work() Console.WriteLine(“我继承与Person接口“); void Monkey.Work() Console.WriteLine(“我继承与猴子接口“); ,?,使用显式接口实现,显式接口实现,static void Main(string args) MonkeyPerson mp=new MonkeyPerson(); Person p=mp; p.Work(); Monkey m=mp; m.Work(); Console.ReadLine(); ,演示:示例 13,public interface Person void Work(); public interface Monkey void Climb(); ,public interface MonkeyPerson:Monkey,Person void Hunter(); public class BjMonkeyPerson:MonkeyPerson public void Work() Console.WriteLine(“我是人的方法“); public void Climb() Console.WriteLine(“我是猴子的方法“); public void Hunter() Console.WriteLine(“我是猴人的方法“); ,static void Main(string args) BjMonkeyPerson bmp=new BjMonkeyPerson(); bmp.Work(); bmp.Climb(); bmp.Hunter(); Console.ReadLine(); ,6.7 异常处理,如果不输入程序提示的内容会出现什么情况? 在C#中,程序中的运行时错误使用一种称为“异常”的机制在程序中传播。异常由遇到错误的代码引发,由能够更正错误的代码捕获。异常可由.NET Framework公共语言运行时(CLR)或由程序中的代码引发。,23,6.7.1 管理异常,异常由从Exception派生的类表示,程序中发生一个异常时,就会生成一个异常类的某种类型的对象。C#中使用try、catch、throw和finally四个关键字来管理的。,24,1. try/catch,把可能发生异常的代码放在try语句块中,而将处理异常的代码放在catch块中。 例:见619,2. finally块,执行异常产生后清除内存的操作 例:见620 执行顺序:如果try块中的代码检测到一个异常,程序马上离开try块进入到catch块,执行完后自动进入finally块。 无论有无异常,都会执行finally块 多个异常:见621,3、传递异常,把异常传递到调用的程序中,在程序的执行期间发出异常信息。使用throw来完成,它能产生一个新的异常,并把它传递到下一个try/catch块中。 见例622,4、自定义异常,C#的内置异常机制处理了大多数常见的错误,但我们还可以设计自己的异常,使得它适合于特定的应用程序。 见623,总

温馨提示

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

评论

0/150

提交评论