面向对象编程二继承封装和多态

上传人:资****亨 文档编号:489842364 上传时间:2024-05-14 格式:PPT 页数:22 大小:1.27MB
返回 下载 相关 举报
面向对象编程二继承封装和多态_第1页
第1页 / 共22页
面向对象编程二继承封装和多态_第2页
第2页 / 共22页
面向对象编程二继承封装和多态_第3页
第3页 / 共22页
面向对象编程二继承封装和多态_第4页
第4页 / 共22页
面向对象编程二继承封装和多态_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《面向对象编程二继承封装和多态》由会员分享,可在线阅读,更多相关《面向对象编程二继承封装和多态(22页珍藏版)》请在金锄头文库上搜索。

1、第五讲 面向对象编程(二)继承、封装和多态整理ppt4.3 4.3 继承、封装和多态继承、封装和多态n n4.3.1 继承n n4.3.2 封装n n4.3.3 多态n n4.3.4 this和base关键字整理ppt4.3.1 4.3.1 类的继承类的继承 继承的意思是一个类可以建立在另一个类的根底上,可以继承另一个类的属性和方法。我们把被继承的类叫做基类,通过继承产生的类叫做派生类也可以叫做父类和子类)。继承的概念来源与现实的生活,比方汽车、轮船、火车飞机等就是继承于交通工具这个类,而汽车类中又可以派生出新的类,比方轿车、面包车等等。引入继承可以让我们重用以前写过的代码,新编写的代码可以在

2、原来的根底上继承而来。在C#中继承的方式就是定义派生类。在C#中,所有的类都是通过直接或间接地继承Object类得到的。整理ppt1.1.派生子类派生子类定义派生类的根本形式:class 派生类名字:基类名字 派生类的代码;public class Parent public Parent().定义一个构造函数 public void WriteItem().定义方法 public class Child:Parent public Child().派生类的构造函数 public static void Main()Child a=new Child();a.WriteItem();派生类使用

3、基类的方法基类的构造函数先执行再执行派生类的构造函数。整理ppt2.2.域的继承、添加与隐藏域的继承、添加与隐藏1、域的继承:子类可以继承父类的所有成员。2、域的添加:在子类定义中加上新的域变量,就可以使得子类具有比父类多的属性。如:class Student:Person string school;int score;子类比父类多了两个成员:school、score。3、域的隐藏:子类重新定义一个从父类中继承的域变量。class A public int a;class B:A new public int a;使用new修饰符来隐藏父类的同名成员a。整理ppt3.3.方法的继承、添加与覆

4、盖方法的继承、添加与覆盖1、方法的继承:子类可以继承父类的所有方法。2、方法的添加:在子类定义中加上新的方法,以针对子类实现相应的功能。比方可以在Student类中定义分数的判断方法。3、方法的覆盖:子类定义与父类同名的方法。(多态之一 1定义同名但参数列表不同的方法,称为方法的重载;2定义同名且参数列表也相同的方法,称为新增,这时应 该在同名方法前面用new修饰符;3定义同名且参数列表也相同的方法,并且父类中的方法用abstract/virtual进行修饰,子类中的方法用override进行了修饰,称为虚方法的覆盖。整理ppt方法重载举例方法重载举例class parent public i

5、nt add(int x,int y)return(x+y);class child:parent public int add(int x,int y,int z)return(x+y+z);public static void Main()child c1=new child();c1.add(1,2,3);c1.add(4,5);分别使用了自己和父类的方法。整理ppt方法隐藏举例方法隐藏举例class parent public int add(int x,int y)return(x+y);class child:parent new public int add(int x,int

6、y)return(x+y+10);public static void Main()child c1=new child();c1.add(4,5);使用了自己的方法。整理ppt虚方法覆盖举例虚方法覆盖举例Class one public void x()Console.WriteLine(“one_x);public virtual void y()Console.WriteLine(“one_y);Class two:one new public void x()/隐藏父类中的同名方法 Console.WriteLine(“two_x);public override void y()/重

7、写同名方法 Console.WriteLine(“two_y);Class test public static void Main()two m2=new m2();one m1=m2;/m1指向m2实例 m1.x();m2.x();m1.y();m2.y();结果:one_x two_x two_y two_y整理ppt4.3.2 4.3.2 类的封装类的封装 类的封装改变了用户传统的使用数据和代码的方式,它将方法和数据包含在一起构成一个独立的单元,可以通过设定单元内各个成员的的特性来控制对成员的访问。比方将一个字段定义为private,就可以防止外界直接访问这个字段。封装一个类由两种做法

8、:1为一个私有类定义公共读方法和写方法;2使用属性,用set和get访问器。整理pptpublic class Student private string studentname;public string getstudentname()return(studentname);public string setstudentname(string na)studentname=na;class App public static void Main()Student s1=new Student();s1.setstudentname(“zhanghua);Console.WriteLin

9、e(s1.getstudentname();不能使用语句s1.studentname=“zhanghua;整理ppt4.3.3 4.3.3 多态多态 多态指的是定义具有不同功能但相同名称的方法或属性的多个类的能力。C#中的多态可以由虚方法实现。对于非虚方法,其实现是不变的,无论由基类实例调用还是由派生类实例调用都是相同的;而虚方法的实现可以由派生类取代,取代的过程称为重写。重写可以取代从基类继承的虚方法,但原虚方法的可访问性不能改变,静态方法和非虚方法不能被重写。基类 public virtual void Show().派生类 public override void Show().整理pp

10、t 虚方法重写举例:定义基类圆形Round,有一个成员半径,编写构造函数和计算面积的虚方法Area;再定义一个派生类球形Sphere,对虚方法Area进行重写。class Round public double r;public Round(double r)this.r=r;public virtual double Area()return(3.14*r*r);class Sphere:Round public Sphere(double r):base(r)public override double Area()return(3.14*r*r*r);class App static v

11、oid Main()Sphere s=new Sphere(2);Console.WriteLine(s.Area();整理ppt1.this关键字关键字this关键字的作用是引用调用方法的当前实例,它可以从构造函数、实例方法和实例访问器中访问成员。用法一:使用this来访问域和方法void sayHello()Console.WriteLine(“My name is+name);与以下方法相同void sayHello()Console.WriteLine(“My name is+this.name);用法二:解决局部变量与域同名问题public Student(string name,s

12、tring number)this.name=name;this.number=number;4.3.4 this4.3.4 this和和basebase关键字关键字整理pptthis关键字举例关键字举例using System;public class Student public string name;public string number;public double subsidy=180;public Student(string name,string number)this.name=name;this.number=number;public void ShowInfo()C

13、onsole.WriteLine(“0n1,name,number;Console.WriteLine(“0,AdvSubsidy.Caculate(this);public class AdvSubsidy public static double Caculate(student E)return(1.5*(E.subsidy);public class AppMain public static void Main()Student s1=new Student(“zhanghua,“200454240);s1.ShowInfo();整理pptthisthis的本卷须知的本卷须知this

14、指的是调用的“对象本身1通过this不仅可以引用该类中定义的域和方法,还可以引用该类的父类中定义的域和方法;2在static静态方法中,不能使用this关键字。整理ppt2.base2.base关键字:关键字:basebase指的是父类指的是父类1)明确指明父类的域和方法,例如,父类Person中有一个域为age,那么在子类Student中用age、this.age、base.age来访问age是完全一样的。2)当子类的方法隐藏或覆盖了父类的同名方法但又要调用父类的方法时,使用base关键字。3)想使用父类的构造方法。构造方法是不能继承的,但子类可以在构造方法中调用直接父类的构造方法,如 St

15、udent(string name,int age,string school):base(name,age)this.school=school;整理pptbase用法用法2举例举例using System;public class A public int a=10;public void m()a+;Console.WriteLine(a);class B:A new public int a=20;new public void m()a+;/base.m();Console.WriteLine(a);public static void Main()A x=new A();Conso

16、le.WriteLine(x.a);/10 x.m();/11 B y=new B();Console.WriteLine(y.a);/20 y.m();/11 21 如此处直接使用base.m();那么最后的结果为12而不是21。整理ppt4.4 4.4 运算符重载运算符重载n n4.4.1 运算符重载根本概念n n4.4.2 单目运算符重载n n4.4.3 双目运算符重载整理ppt4.4.1 4.4.1 多态之二:运算符的重载多态之二:运算符的重载运算符可以进行根本数据类型之间的运算,想把自己定义的类型进行类似“之类的运算就要用到运算符重载对于、运算符完全可以提供对应的方法来完成,比方Decimal x,y;X+=y;可以写成 decimal.Add(x,y)x+=y;运算符重载的一般形式是 public static 返回类型 operator 运算符参数表 语句;整理pptusing System;using System;Class class1Class class1 public int x1,x2;public int x1,x2;public class1()publ

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

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

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