版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五讲 面向对象编程(二)继承、封装和多态14.3 继承、封装和多态4.3.1 继承4.3.2 封装4.3.3 多态4.3.4 this和base关键字24.3.1 类的继承 继承的意思是一个类可以建立在另一个类的基础上,可以继承另一个类的属性和方法。我们把被继承的类叫做基类,通过继承产生的类叫做派生类(也可以叫做父类和子类)。继承的概念来源与现实的生活,比如汽车、轮船、火车飞机等就是继承于交通工具这个类,而汽车类中又可以派生出新的类,比如轿车、面包车等等。 引入继承可以让我们重用以前写过的代码,新编写的代码可以在原来的基础上继承而来。 在C#中继承的方式就是定义派生类。 在C#中,所有的类都
2、是通过直接或间接地继承Object类得到的。31. 派生子类定义派生类的基本形式: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( ); 派生类使用基类的方法基类的构造函数先执行再执行派生类的构造函数。42. 域的继
3、承、添加与隐藏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。53. 方法的继承、添加与覆盖1、方法的继承:子类可以继承父类的所有方法。2、方法的添加:在子类定义中加上新的方法,以针对
4、子类实现相应的功能。比如可以在Student类中定义分数的判断方法。 3、方法的覆盖:子类定义与父类同名的方法。(多态之一) (1)定义同名但参数列表不同的方法,称为方法的重载; (2)定义同名且参数列表也相同的方法,称为新增,这时应 该在同名方法前面用new修饰符; (3)定义同名且参数列表也相同的方法,并且父类中的方法用abstract/virtual进行修饰,子类中的方法用override进行了修饰,称为虚方法的覆盖。6方法重载举例class parent public int add( int x,int y ) return(x+y); class child:parent publ
5、ic 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); 分别使用了自己和父类的方法。7方法隐藏举例class parent public int add( int x,int y ) return(x+y); class child:parent new public int add(int x,int y) return(x+y+10); public static void Main( ) child
6、 c1=new child( ); c1.add(4,5); 使用了自己的方法。8虚方法覆盖举例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( )/重写同名方法 Console.WriteLine(“two_y”);Class test
7、 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_y94.3.2 类的封装 类的封装改变了用户传统的使用数据和代码的方式,它将方法和数据包含在一起构成一个独立的单元,可以通过设定单元内各个成员的的特性来控制对成员的访问。比如将一个字段定义为private,就可以防止外界直接访问这个字段。封装一个类由两种做法:1)为一个私有类定义公共读方法和写方法;2)使用属性,用set和get访问器。10public
8、 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.WriteLine(s1.getstudentname( ); 不能使用语句s1.studen
9、tname=“zhanghua”;114.3.3 多态 多态指的是定义具有不同功能但相同名称的方法或属性的多个类的能力。C#中的多态可以由虚方法实现。 对于非虚方法,其实现是不变的,无论由基类实例调用还是由派生类实例调用都是相同的;而虚方法的实现可以由派生类取代,取代的过程称为重写。重写可以取代从基类继承的虚方法,但原虚方法的可访问性不能改变,静态方法和非虚方法不能被重写。基类 public virtual void Show( ) . 派生类 public override void Show( ) . 12 虚方法重写举例:定义基类圆形Round,有一个成员半径,编写构造函数和计算面积的虚
10、方法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 void Main( ) Sphere s=new Sphe
11、re(2); Console.WriteLine(s.Area( ); 131. this关键字this关键字的作用是引用调用方法的当前实例,它可以从构造函数、实例方法和实例访问器中访问成员。用法一:使用this来访问域和方法void sayHello( ) Console.WriteLine(“My name is”+name);与以下方法相同void sayHello( ) Console.WriteLine(“My name is”+);用法二:解决局部变量与域同名问题public Student(string name,string number)
12、=name; this.number=number;4.3.4 this和base关键字14this关键字举例using System;public class Student public string name; public string number; public double subsidy=180; public Student(string name,string number) =name; this.number=number; public void ShowInfo( ) Console.WriteLine(“0n1”,name,number; Con
13、sole.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( ); 15this的注意事项this指的是调用的“对象”本身(1)通过this不仅可以引用该类中定义的域和
14、方法,还可以引用该类的父类中定义的域和方法;(2)在static静态方法中,不能使用this关键字。162. base关键字:base指的是父类1) 明确指明父类的域和方法,例如,父类Person中有一个域为age,则在子类Student中用age 、 this.age 、 base.age来访问age是完全一样的。2) 当子类的方法隐藏或覆盖了父类的同名方法但又要调用父类的方法时,使用base关键字。3) 想使用父类的构造方法。构造方法是不能继承的,但子类可以在构造方法中调用直接父类的构造方法,如 Student(string name,int age,string school) :bas
15、e(name,age) this.school=school;17base(用法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( ); Console.WriteLine(x.a); /10 x.m( );
16、/11 B y=new B( ); Console.WriteLine(y.a); /20 y.m( ); /11 21 如此处直接使用base.m( );则最后的结果为12而不是21。184.4 运算符重载4.4.1 运算符重载基本概念4.4.2 单目运算符重载4.4.3 双目运算符重载194.4.1 多态之二:运算符的重载运算符可以进行基本数据类型之间的运算,想把自己定义的类型进行类似“”之类的运算就要用到运算符重载对于、运算符完全可以提供对应的方法来完成,比如Decimal x,y;X+=y; 可以写成 decimal.Add(x,y) x+=y;运算符重载的一般形式是 public s
17、tatic 返回类型 operator 运算符(参数表) 语句; 20using System;Class class1 public int x1,x2; public class1() x1=1; x2=2; public static int operator +(class1 c) c.x1=c.x1+10; c.x2=c.x2+5; Public void Show() Console.WriteLine(“0,1”,x1,x2);Class App public static void Main( ) class1 mc=new class1( ); mc.Show( ); mc+; mc.Show( ); 结果:x1=1,x2=2 x1=11,x2=74.4.2 单目运算符重载 +21using System;Class class1 public int x1,x2; public class1() x1=1; x2=2; public static class1 o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度品牌授权使用合同市场开发要求
- 2024版房地产项目开发与建设合同
- 二零二四年文化演出活动承办合同法律框架
- 2024年度音像制品仓储配送服务合同
- 北京工业大学《高等代数与解析几何(1)》2023-2024学年第一学期期末试卷
- 北京工业大学《CIS视觉系统设计》2023-2024学年第一学期期末试卷
- 2024年度电商买手岗位工作成果分配合同3篇
- 北京城市学院《工业机器人应用技术》2022-2023学年第一学期期末试卷
- 2024年度租赁协议(设备)
- 2024年度云计算服务供应与购买协议3篇
- 土石方开挖(高边坡)施工方案
- HG20202-2014 脱脂工程施工及验收规范
- 数据恢复服务合同范本
- 静压钢制沉井与导向式微型顶管定额
- 2024版《保密法》培训课件
- 第一单元《行进之歌》欣赏《中国人民解放军进行曲》课件人音版初中音乐七年级下册
- 小学生习惯养成行为标准40条
- 2024年辽宁省沈阳市中考数学模拟练习卷(含答案)
- 2024年湖南湘钢工程技术有限公司招聘笔试参考题库附带答案详解
- 放射科疑难病例分析
- 产业园区总体规划编制指南
评论
0/150
提交评论