第5章 面向对象高级 继承ppt课件.ppt

上传人:小飞机 文档编号:1428604 上传时间:2022-11-23 格式:PPT 页数:62 大小:829.50KB
返回 下载 相关 举报
第5章 面向对象高级 继承ppt课件.ppt_第1页
第1页 / 共62页
第5章 面向对象高级 继承ppt课件.ppt_第2页
第2页 / 共62页
第5章 面向对象高级 继承ppt课件.ppt_第3页
第3页 / 共62页
第5章 面向对象高级 继承ppt课件.ppt_第4页
第4页 / 共62页
第5章 面向对象高级 继承ppt课件.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《第5章 面向对象高级 继承ppt课件.ppt》由会员分享,可在线阅读,更多相关《第5章 面向对象高级 继承ppt课件.ppt(62页珍藏版)》请在三一办公上搜索。

1、课前练习,定义一个Time类,包括:三个私有数据成员时,分,秒;两个构造函数,一个通过传入的参数对时、分、秒进行初始化,一个无参构造函数获取系统当前时间(System.DateTime.Now.Hour, System.DateTime.Now.Minute, System.DateTime.Now.Second 分别取得当前的时、分、秒),三个自读属性对时、分、秒读取一个方法用于对秒增加1秒(void addseconed(),注意六十进位问题一个输出时、分、秒的输出方法void output();创建对象进行测试,面向对象-继承,5.1 类的继承,5.1.1 继承的概念在现实生活中,继承一

2、般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,在程序中便可认为猫和狗继承自动物,同理波斯猫和巴厘猫继承自猫,而沙皮狗和斑点狗继承自狗,这些动物之间会形成一个继承体系。具体如下图所示。,5.1 类的继承,在C#中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有的类被称作父类,子类会自动拥有父类所有可继承的属性和方法。,继承关系,在面向对象环境中,不同类的对象间有各种关系:继承关系:,父类(超类 ),继承关系,父类,子类,继承关系,父类,子类,继承父母的特征,如身高、肤色和行

3、为,继承关系,你可以在超类和它的子类之间建立关系。下图显示了超类的子类的层次。,继承关系,Automobile 属性:车轮、引擎、颜色等,前进、加速、后退、停止等方法,思考,创建搅拌器、VCR、洗衣机、音响类、对象的层次,并且在可能的地方进行归纳。,答案:下图显示了类对象的层次。,组合关系,面向对象编程允许你组成一个对象,它包括另一个对象作为它的部分。这个组成对象的机制被称为组合。,汽车与轮胎的关系,公司与部门的关系,思考,识别下面类对间的关系:1.电视 扬声器2.哺乳动物 老虎3.外衣 衬衫4.杯子 茶5.计算机 微处理器,答案:5 和 1是组合关系的例子。3 和 2是继承关系的例子。4没有

4、表现出任何关系。茶不是杯子的属性。,利用关系,面向对象编程允许类使用另一个类。这个关系类型被称为利用。,思考,在下面的部门商店的场景中识别类和它们的利用关系。 有几个柜台,商店的每个柜台由一个销售人员负责,它销售特定的商品。顾客来到一个柜台。依赖顾客购买产品的想法,销售人员销售产品给客户并且接受支付。,答案:上述场景的利用关系是:销售人员管理柜台。每个柜台处理一个特定的产品。顾客买一个产品。顾客付钱给销售人员。,名词 动词 名词,实例化关系:实例化关系是类与类的实例之间的关系。这种关系称为实例化。xxx 是 xxx公共汽车是机动车香蕉是水果西南石油大学是一所高校,在C#中,继承实际就是子类继承

5、父类的数据成员和成员函数。继承或从其他类获得属性的类被称为派生类。属性被派生的类被称为基类。在面向对象编程中,基类实际是超类,派生类是子类。基类、超类是一回事派生类、子类是一回事,使用类和继承,实现继承,定义一个animal类,具有数据成员 name,age,和赋值方法void setdata 给name和age成员赋值,一个输出output方法输出name和age的值定义一个dog类,具有数据成员name,age和type(string类型),具有赋值方法void setdog给name、age和type数据成员赋值,output_dog方法输出name、age和type的值,基类和派生类的

6、写法和继承关系,基类中公有成员 在派生类的访问及类外访问情况,基类中的公用成员 在派生类及其类外均可直接访问 基类的 公有成员在派生类中仍然是公有成员,基类中私有成员 在派生类的访问及类外的访问,基类的私有成员在派生类中没法直接使用,在类外也不能访问继承的基类私有成员在派生类中仍然是 私有成员,基类中保护成员 在派生类的访问和类外访问情况,基类中保护成员 在派生类 可直接使用,在派生类中仍然是保护成员保护成员在 类外部是 没法访问的,派生类书写 形式public或internal class 类名:基类名,5.1 类的继承,注意:在类的继承中,需要注意一些问题,具体如下:派生类自然继承基类的成

7、员基类中的公用成员 在派生类及其类外均可直接访问 继承的 公有成员在派生类中仍然是公有成员基类的私有成员在派生类中没法直接使用,在类外也不能访问继承的基类私有成员在派生类中仍然是 私有成员基类中保护成员 在派生类 可直接使用,在派生类中仍然是保护成员保护成员在 类外部是 没法访问的,继承具有单一性,也就是说一个类只能有一个直接的父类,例如下面的语句是错误的。多个类可以继承同一个父类,例如下面的语句是正确的。,class A class B class C : A , B /C类不可以同时继承A类和B类,class A class B : A class C : A /类B和类C都可以继承类A,

8、5.1 类的继承,在C#中,多层继承是可以的,即一个类的父类可以再去继承其他类,例如C类继承自B类,B类又继承自A类,这时,C类也可称作A类的子类,下面的语句是正确的。,class A class B : A /B类继承自A类,B类是A类的子类 class C : B /C类继承自B类,C类是B类的子类,举例,课堂练习,Employee类是一个基类,它包含_name和_qualification两个私有成员(string类型)以及用于接收(void setdata(string name,string qualificatin)和显示信息(void display()的两个方法。名为Progr

9、ammer的派生类包含_languages、_os和_databases 3个私有成员(string 类型)和用于接收和显示信息的两个方法。为Programmer类创建一个对象,并调用派生类的方法来存储和输出值。,派生类中 构造函数的调用顺序,创建派生类对象 先调用继承的基类构造函数,然后再调用派生类构造函数派生类构造函数 后面没有指定基类构造函数 先调用默认无参的基类构造函数,派生类 对象 调用继承的基类有参构造函数,课堂练习,用C#编写一个程序,使用Employee和Programmer两个类。Employee具有姓名和学历等属性,通过构造函数给属性赋初值(提供无参和有参构造函数),需要提

10、供方法实现以接收和显示这些属性的值。Programmer类具有Employee类属性,还具有代表其技能集的属性,这些属性表明程序员在编程语言、操作系统和数据库方面的专业知识,通过构造函数为这些属性赋初值(提供无参和有参构造函数)。同样地,需要提供方法实现以接收和显示这些属性的值。通过主函数 创建派生类对象 来 显示 所以属性的信息。分析:Employee类是一个基类,它包含_name和_qualification两个成员以及构造函数、接收和显示信息的三个方法。名为Programmer的派生类包含_languages、_os和_databases 3个成员和构造函数、用于接收和显示信息的两个方法

11、。,定义一个Account类为基类,具有账号num,余额(balance)数据信息,具有创建账户void create(string num,float balance), 存款void deposi (float num),取款 void withdraw (float num)和查询余额void display(),定义有参和无参构造函数其中取款操作 不允许余额小于0定义派生类Vipaccount,定义有参和无参构造函数,取款操作重新实现 允许透支1000元 (提示由于balance需要变动,所以balance在基类中是私有成员没法在派生类中直接访问,所以需要在基类中定义公有float g

12、etbalance()和void setbalance(float num) 通过主函数 定义派生类对象,并调用相关方法进行测试,5.1 类的继承,5.1.2 构造方法的执行过程在上一章中学习了构造方法的定义以及重载,了解到构造方法可以用于初始化类的静态成员和实例成员。在继承关系中,构造方法的执行过程会变得有些不一样,下面进行具体分析。 当一个类的对象被创建时,如果该类拥有父类的话,在调用自身构造方法的同时还会调用父类的构造方法,其具体执行过程如下图所示。,5.1 类的继承,从图中可以看出,子类在实例化对象时,首先会调用父类的构造方法,然后再调用自身的构造方法。,5.1 类的继承,5.1.3

13、隐藏同名基类方法子类在继承父类时可以对父类的成员进行扩展,如果子类中出现与父类同名的方法,那么在调用该方法时程序就不能明确该方法是属于父类还是子类,这时编译器就会提示使用new关键字隐藏基类方法。,接下来,通过一个案例来演示这种情况,具体如下。,5.1 类的继承,5.1 类的继承,程序编译出现警告,结果如下图所示。,5.1 类的继承,根据程序编译警告,将程序第12行代码添加一个new关键字,修改后的代码片段如下所示。,class Dog : Animal public new void Shout() /与父类方法重名 Console.WriteLine(汪汪.); ,5.1 类的继承,程序修

14、改后的运行结果如下图所示。在示例中,Dog类继承Animal类,同时Dog类中存在与父类相同的方法Shout(),因此,使用new关键字可以明确告诉编译器执行Dog类中的Shout()方法,解决继承关系中方法同名的问题。,通过base 关键字访问基类的成员通过new关键字实现派生类隐藏基类同名方法,讨论,派生类对象创建时,派生类的构造方法与基类的构造方法执行顺序在没有指定基类构造方法情况下,派生类无参构造方法将调用基类的哪个构造方法派生类的析构函数与基类的析构函数的执行顺序,先执行基类的构造方法,再执行派生类的构造方法,调用基类的无参数构造方法,与构造方法执行顺序相反,先调用派生类的析构方法再

15、调用基类的析构方法,演示,class Base protected int i; protected Base() i=6; Console.WriteLine (Constructor of Base); protected Base(int k) i=k; Console.WriteLine (Constructor of Base); Base() Console.WriteLine (destructor of Base); class Derived1:Base/继承Base类 ,class BaseDerivedstatic int Main() Derived1 t=new De

16、rived1();t.print();Derived1 x=new Derived1(10);x.print();,/inherit2.cs,ublic Derived1()Console.WriteLine (Constructor of Derived);public Derived1(int y):base(10)i=y+i;public void print()Console.WriteLine(i);/继承Base中i成员Derived1()Console.WriteLine (Constructor of Derived);,结论,派生类的构造方法可以调用指定的基类构造方法prot

17、ected和public修饰的成员,可以被派生类继承,并被派生类直接使用,课堂练习,Point,Circle,点(Point)类具有以下属性:坐标X坐标Y构造函数Public Point(int x,int y),(Circle)类继承Point类具有以下属性:坐标X坐标Y半径R构造函数Public Circle(int x,int y,int r)其他方法area()求面积,构造这两个类和相应的方法,并进行初始化给求圆的面积,5.1 类的继承,5.1.4 装箱与拆箱在实际开发过程中,某些方法的参数类型为引用类型,但是如果调用时传入的是值类型,此时需要进行装箱操作。同样当一个方法的返回值类型为

18、值类型,但实际方法返回值为引用类型,那么就需要进行拆箱操作。简单来说,装箱就是将值类型转换为引用类型,拆箱就是将引用类型转换为值类型。接下来通过一个案例来学习装箱和拆箱操作,具体如下。,5.1 类的继承,运行结果如下图所示。,5.1 类的继承,示例中定义了一个值类型的变量num,一个引用类型的变量obj,将变量num赋值给变量obj时系统会自动进行装箱操作,但反过来将变量obj赋值给变量num就需要进行拆箱操作。需要注意的是,装箱和拆箱过程本质上是数据存储在栈与堆之间变更,因此频繁的装箱拆箱操作会影响运算效率,所以要尽量减少相关操作。,5.2 sealed关键字,5.2.1 sealed关键字

19、修饰类在C#中,使用sealed关键字修饰的类不可以被继承,也就是说不能派生子类,这样的类通常被称作密封类。接下来通过一个简单的例子来学习sealed关键字的使用,具体如下。,5.2 sealed关键字,5.2 sealed关键字,程序编译报错,结果如下图所示。,5.2 sealed关键字,由于Animal类被sealed关键字所修饰,因此当Dog类继承Animal类时,编译出现“program05.Dog”;无法从密封类型“program05.Animal派生”的错误。由此可见,被sealed关键字修饰的类不能被其他类继承。,5.2 sealed关键字,5.2.2 sealed关键字修饰方法

20、当一个类的方法被sealed关键字修饰后,这个类的子类将不能重写该方法。接下来通过一个案例来演示这种情况,具体如下。,5.2 sealed关键字,5.2 sealed关键字,程序编译报错,结果如图所示。,5.2 sealed关键字,在示例中,定义了一个子类BlackDog继承Dog类,Dog类继承自Animal类。Dog类重写了父类的Shout()方法,并使用sealed关键字修饰,由编译报错的信息可知,Dog类中被sealed关键字修饰的Shout()方法不能在BlackDog类中被重写。,本章详细讲解了类的继承、多态、抽象类和接口等面向对象的核心内容,同时还介绍了sealed关键字、异常、命名空间和程序集的使用。熟练掌握本章内容,能够更快速、更高效地学习其它章节的内容。,Timer控件Timer控件可以周期性的执行某个操作,这些操作都是通过引发Timer控件的Tick事件完成的,Tick事件触发的频率是由Interval属性控制的。通过Timer控件可实现跑马灯的效果,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号