第5章 面向对象.ppt

上传人:s****8 文档编号:82769606 上传时间:2023-03-26 格式:PPT 页数:73 大小:1.02MB
返回 下载 相关 举报
第5章 面向对象.ppt_第1页
第1页 / 共73页
第5章 面向对象.ppt_第2页
第2页 / 共73页
点击查看更多>>
资源描述

《第5章 面向对象.ppt》由会员分享,可在线阅读,更多相关《第5章 面向对象.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第5章章 面向对象面向对象回顾q简单计算机器简单计算机器q随机计算:系统随机生成两个数,并随机随机计算:系统随机生成两个数,并随机生成四则运算中的一种。生成四则运算中的一种。想一想你知道我国的四大发明吗?你知道我国的四大发明吗?哪一个发明只是技术上的改进?哪一个发明只是技术上的改进?q第一,要改,只需更改要改之字,此为第一,要改,只需更改要改之字,此为可维护可维护;q第二,这些字并非用完这次就无用,完全可以在后第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃来的印刷中重复使用,此乃可复用可复用;q第三,此诗若要加字,只需另刻字加入即可,这是第三,此诗若要加字,只需另刻字加

2、入即可,这是可扩展可扩展;q第四,字的排列其实有可能是竖有可能是横排,此第四,字的排列其实有可能是竖有可能是横排,此时只需将活字移动就可做到满足排列需求,此是时只需将活字移动就可做到满足排列需求,此是灵灵活性好活性好。四大发明之四大发明之活字印刷活字印刷 面向对象思想的胜利面向对象思想的胜利 面向对象q面向对象的优点和特征面向对象的优点和特征q类的声明和实例化类的声明和实例化q类成员类成员q构造函数和析构函数构造函数和析构函数q封装封装-属性属性q继承继承q多态多态q抽象抽象面向对象的优点和特征q面向对象编程的优点面向对象编程的优点:q可维护性高q可复用好q可扩展好q灵活性高q面向对象的特点:

3、面向对象的特点:q抽象q封装q继承q多态类的声明和实例化q类是对象的模板,对象时类的实例,使用对象前类是对象的模板,对象时类的实例,使用对象前必须先创建类必须先创建类访问修饰符访问修饰符 class 类名类名:父类名父类名 字段;字段;/描述对象的状态描述对象的状态 属性;属性;/用于设置或获取类中相关的数据值用于设置或获取类中相关的数据值 方法;方法;/实现对象的行为实现对象的行为 构造函数;构造函数;/初始化对象初始化对象 private class People private string name;类的声明和实例化q对象是类的实例,是具体的。要使用对象,必须对象是类的实例,是具体的。

4、要使用对象,必须使用关键字使用关键字new 实例化类的一个对象实例化类的一个对象 =new People object1 =new People();类成员q成员变量成员变量q成员方法成员方法成员变量成员变量常量常量:在类中声明的常量,代表与类相关的常:在类中声明的常量,代表与类相关的常数值。数值。字段字段:在类中声明的变量,用于存储属性的值。:在类中声明的变量,用于存储属性的值。类型类型:属于类的局部类型。:属于类的局部类型。索引器索引器:又称下标指示器,通过索引器访问类:又称下标指示器,通过索引器访问类的多个实例。的多个实例。成员方法成员方法方法方法:完成类中的各种操作,是封装在类内部的、

5、:完成类中的各种操作,是封装在类内部的、用于执行一定操作的过程或函数。用于执行一定操作的过程或函数。属性属性:用于设置或获取类中相关的数据值,如定:用于设置或获取类中相关的数据值,如定义字段的值并对它们进行读、写操作。义字段的值并对它们进行读、写操作。事件事件:由类产生的通知,用于说明发生了什么,:由类产生的通知,用于说明发生了什么,是一种触发机制,是类对外界的响应,使对象具是一种触发机制,是类对外界的响应,使对象具有与外界进行交互的能力。当某个事件发生时,有与外界进行交互的能力。当某个事件发生时,就调用了与该事件相关联的方法。就调用了与该事件相关联的方法。构造函数构造函数:析构函数析构函数:

6、定义类的字段定义类的字段 字段字段字段字段是用来描述一个类的对象的状态和特征的,如是用来描述一个类的对象的状态和特征的,如是用来描述一个类的对象的状态和特征的,如是用来描述一个类的对象的状态和特征的,如人的名字、性别、年龄等人的名字、性别、年龄等人的名字、性别、年龄等人的名字、性别、年龄等 语法:语法:语法:语法:示例:示例:示例:示例:访问修饰符访问修饰符 数据类型数据类型 字段名字段名 =缺省值缺省值class People public string name;/姓名字段姓名字段 public string sex;/性别字段性别字段 实例定义一个圆形(定义一个圆形(Circle)类,并

7、计算圆的面)类,并计算圆的面积和周长。积和周长。class Circle private double r;/定定义义私有成私有成员变员变量,字段量,字段 private const double PI=3.14;public void getR()/定定义义共有成共有成员员方法,用于方法,用于输输出矩出矩形形长长,宽宽 Console.WriteLine(“半径半径+r);public float getArea()/定定义义共有成共有成员员方法,用于方法,用于计计算矩形面算矩形面积积 return PI*r*r;public void setR(double cur_r)/设设置置长宽长宽

8、的的值值 r=cur_r;static void Main(string args)double r1;Circle c1=new Circle();Console.Write(“输输入原型的半径:入原型的半径:);r1=float.Parse(Console.ReadLine();c1.setR(r1);Console.WriteLine(“圆圆形的面形的面积为积为:+c1.getArea();c1.getR();Console.ReadLine();构造函数和析构函数q构造函数构造函数构造函数特点:构造函数特点:(1 1)具有和类相同的名称)具有和类相同的名称(2 2)没有返回值)没有返回

9、值构造函数功能:构造函数功能:(1)(1)为对象分配内存空间为对象分配内存空间(2)(2)成员变量的初始化成员变量的初始化q析构函数析构函数q特点:与类名相同,前面多一个“”q功能:收回对象占用的内存空间构造函数q构造函数分为构造函数分为无参构造函数无参构造函数和和带参构造函数带参构造函数;q一个类可以有多个构造函数,类在实例化时一个类可以有多个构造函数,类在实例化时根据其携带参数自动选择对应的构造函数根据其携带参数自动选择对应的构造函数实例实例定义一个圆形(定义一个圆形(Circle)类,并计算圆的)类,并计算圆的面积和周长。要求类的构造函数有代参和不面积和周长。要求类的构造函数有代参和不带

10、参两种。带参两种。思考题思考题q定义一个面积(定义一个面积(AreaArea)类,通过定义不同)类,通过定义不同的构造方法计算点,圆,矩形,梯形的面的构造方法计算点,圆,矩形,梯形的面积。要求:计算圆的面积时要求从键盘输积。要求:计算圆的面积时要求从键盘输入半径;计算矩形面积时从键盘输入长和入半径;计算矩形面积时从键盘输入长和宽;计算梯形面积时从键盘输入矩形的上宽;计算梯形面积时从键盘输入矩形的上下底和高。下底和高。class Area public Area()/构造函数构造函数-无参无参 Console.WriteLine(0);public Area(double r)/构造函数构造函数

11、-1个参数个参数计计算算圆圆的面的面积积 Console.WriteLine(Math.PI*r*r);/构造函数构造函数-2个参数个参数-计计算矩形的面算矩形的面积积 public Area(double len,double wid)Console.WriteLine(len*wid);/构造函数构造函数-1个参数个参数-计计算梯形的面算梯形的面积积 public Area(double ULen,double LLen,double high)Console.WriteLine(ULen+LLen)*high/2);定义定义Area 类类static void Main(string a

12、rgs)Console.WriteLine(“点的面点的面积为积为:);Area pointArea=new Area();Console.WriteLine(“圆圆的面的面积积:);Area CircleArea=new Area(10);Console.WriteLine(“矩形的面矩形的面积积:);Area RectangleArea=new Area(10,10);Console.Write(梯形的面梯形的面积为积为:);Area trapeziumArea=new Area(10,20,10);Console.ReadLine();主函数主函数(实例化时完成面积计算实例化时完成面积计

13、算)static void Main(string args)Console.WriteLine(计计算点的面算点的面积为积为:);Area pointArea=new Area();Console.WriteLine(计计算算圆圆的面的面积积,请请先先输输入半径入半径);double r=double.Parse(Console.ReadLine();Area CircleArea=new Area(r);Console.WriteLine(计计算矩形的面算矩形的面积积,请请先先输输入矩形的入矩形的长长与与宽宽);Console.Write(长长=);double length=double

14、.Parse(Console.ReadLine();Console.Write(宽宽=);double width=double.Parse(Console.ReadLine();Console.Write(矩形的面矩形的面积为积为:);Area RectangleArea=new Area(length,width);Console.WriteLine(计计算梯形的面算梯形的面积积,请请先先输输入梯形的上底,下底和高入梯形的上底,下底和高);Console.Write(上底上底=);double UperLength=double.Parse(Console.ReadLine();Conso

15、le.Write(下底下底=);double LowerLength=double.Parse(Console.ReadLine();Console.Write(高高=);double high=double.Parse(Console.ReadLine();Console.Write(梯形的面梯形的面积为积为:);Area trapeziumArea=new Area(UperLength,LowerLength,high);Console.ReadLine();主函数(主函数(用户输入待计算形状的半径或边)用户输入待计算形状的半径或边)析构函数q功能功能:清除对象,收回对象占用的内存空间清

16、除对象,收回对象占用的内存空间q特点:特点:q与类名相同,前面多一个与类名相同,前面多一个“”q一个类只有一个析构函数。一个类只有一个析构函数。q析构函数只能在当前类中使用,不允许继承和重载析析构函数只能在当前类中使用,不允许继承和重载析构函数。构函数。q不允许显式的调用析构函数,只能由系统自动调用。不允许显式的调用析构函数,只能由系统自动调用。q析构函数没有修饰符,也没有参数析构函数没有修饰符,也没有参数Employee()Console.WriteLine(Employee对象已经被释放。对象已经被释放。);封装-属性q属性体现了面向对象的封装性属性体现了面向对象的封装性q通过访问器(通过

17、访问器(get/set)来操作类的数据内容)来操作类的数据内容q 通过通过get/set访问器对属性值进行读写主要有三种:访问器对属性值进行读写主要有三种:q只有只有set访问器,表名属性值只可设置(可写)访问器,表名属性值只可设置(可写)q只有只有get访问器,表名属性值只可读(可读)访问器,表名属性值只可读(可读)q既有既有set又有又有get访问器,表名属性值既可读也可设置(可访问器,表名属性值既可读也可设置(可读可写)读可写)说明:说明:属性的属性的getget访问器通过访问器通过returnreturn来读取属性值,来读取属性值,setset访问器通过访问器通过vlauevlaue来

18、设置属性值来设置属性值类定义举例class Employee private string empName;/姓名 private string sex;/性别 private int wage;/工资 private string idCard;/身份证号 /empName字段对应的属性 /public string EmpName get return empName;set empName=value;定义类定义类EmployeeEmployee的定义,将字段设置的定义,将字段设置为为privateprivate类型,并使用公共属性来类型,并使用公共属性来获取和设置字段的值,代码如下:获

19、取和设置字段的值,代码如下:/sex字段对应的属性 /public string Sex get return sex;set if(value=“男”|value=“女”)sex=value;Elsesex=“男”;/wage字段对应的属性 /public int Wage get return wage;set if(value 0)wage=value;else wage=0;/idCard字段对应的属性 /public string IDCard get return idCard;set idCard=value;/访问私有字段,输出员工信息 /public void PrintEm

20、pInfo()Console.WriteLine(empName);Console.WriteLine(sex);Console.WriteLine(wage);Console.WriteLine(idCard);方法 方法方法方法方法是一组指令集合,用来实现一个类的对象是一组指令集合,用来实现一个类的对象是一组指令集合,用来实现一个类的对象是一组指令集合,用来实现一个类的对象的行为,如人会的行为,如人会的行为,如人会的行为,如人会“使用工具使用工具使用工具使用工具”,狮子会,狮子会,狮子会,狮子会“咬咬咬咬人人人人”语法:语法:语法:语法:访问修饰符访问修饰符 返回值返回值类型类型 方法名方

21、法名(参数)(参数)指令集合;指令集合;/方法体方法体 public float getArea()return length*width;如何编写方法如何编写方法 返回值类型返回值类型返回值类型返回值类型是指当方法执行结束时,方法返回结是指当方法执行结束时,方法返回结是指当方法执行结束时,方法返回结是指当方法执行结束时,方法返回结果的数据类型。果的数据类型。果的数据类型。果的数据类型。例如:对例如:对例如:对例如:对2 2个整数进行求和的方法,个整数进行求和的方法,个整数进行求和的方法,个整数进行求和的方法,其返回值类型就是整形其返回值类型就是整形其返回值类型就是整形其返回值类型就是整形 如

22、果方法如果方法如果方法如果方法没有返回值没有返回值没有返回值没有返回值,使用,使用,使用,使用voidvoid关键字关键字关键字关键字参数是可选的参数是可选的,表示传递给方法中要处理的数据,表示传递给方法中要处理的数据,例如:对例如:对2个整数进行求和的方法,就需要个整数进行求和的方法,就需要2个整个整形的参数形的参数参数的声明方法和变量一样参数的声明方法和变量一样,如果有多个参数,如果有多个参数,参数之间用参数之间用,分开分开给方法传递参数给方法传递参数 当调用方法时,当调用方法时,当调用方法时,当调用方法时,传递参数的个数、数据类型、顺序传递参数的个数、数据类型、顺序传递参数的个数、数据类

23、型、顺序传递参数的个数、数据类型、顺序必须与方法签名一致必须与方法签名一致必须与方法签名一致必须与方法签名一致 方法名方法名方法名方法名+方法的参数列表方法的参数列表方法的参数列表方法的参数列表合称为合称为合称为合称为方法签名方法签名方法签名方法签名class SimpleMath public int Add(int x,int y)return x+y;/调用方法时需要传递参数调用方法时需要传递参数SimpleMath sums=new SimpleMath();int total=sums.Add(20,30);方法参数的传递方式方法参数的传递方式qC#中方法的参数有中方法的参数有4种类

24、型:种类型:q值参数值参数,不含任何修饰符。,不含任何修饰符。q引用型函数引用型函数,以,以Ref修饰符声明。修饰符声明。q输出参数输出参数,以,以Out修饰符声明。修饰符声明。q数组型参数数组型参数,以,以Params修饰符声明。修饰符声明。若A语句中调用方法B,两者间有参数传递,那么,我们将A A调用语句中传送的参数称为调用语句中传送的参数称为实实参参;被调用的方法B中使用的参数成为形参。方法参数的传递方式方法参数的传递方式(值参数传递值参数传递)q例例 两数交换:两数交换:值参数传递示例。值参数传递示例。static void Main(string args)int a=3;int b

25、=5;change(a,b);Console.WriteLine(a=0,b=1,a,b);static void change(int x,int y)int temp;temp=x;x=y;y=temp;a=3,b=5方法参数的传递方式方法参数的传递方式(引用型参数引用型参数)q例例 把上面例子改写成引用型参数传递。把上面例子改写成引用型参数传递。static void Main(string args)int a=3;int b=5;change(ref a,ref b);Console.WriteLine(a=0,b=1,a,b);static void change(ref int

26、x,ref int y)int temp;temp=x;x=y;y=temp;a=5,b=3方法参数的传递方式方法参数的传递方式(输出型参数输出型参数)q例例 使用使用Out关键字练习编写输出参数。关键字练习编写输出参数。static void Main(string args)int a,b;change(out a,out b);Console.WriteLine(n 调用调用change函数后返回主程序:函数后返回主程序:a=0,b=1,a,b);Console.ReadLine();private static void change(out int x,out int y)int t

27、emp;x=3;y=5;Console.WriteLine(n 函数内交换前函数内交换前 x=0,y=1,x,y);temp=x;x=y;y=temp;Console.WriteLine(n 函数内交换后函数内交换后 x=0,y=1,x,y);函数内交换前函数内交换前 x=3,y=5函数内交换后函数内交换后 x=5,y=3调用调用change函数后返回主程序:函数后返回主程序:a=5,b=3方法参数的传递方式q当利用当利用值传递参数值传递参数时,编译程序时,编译程序给实参的给实参的值做一份值做一份复制,并且复制,并且将此复制传递给该方法将此复制传递给该方法。被调用的方法。被调用的方法不会修改内

28、存中实参的值,所以使用值参数时,可不会修改内存中实参的值,所以使用值参数时,可以保证实际值是安全的。以保证实际值是安全的。q与值参不同的是,与值参不同的是,引用型参数引用型参数并不开辟新的内存区并不开辟新的内存区域域。当利用引用型参数向方法传递形参时,编译程。当利用引用型参数向方法传递形参时,编译程序将把序将把实际值在内存中的地址传递给方法实际值在内存中的地址传递给方法。q与引用型参数类似,与引用型参数类似,输出型参数输出型参数也不开辟新的内存也不开辟新的内存区域。与引用型参数的差别在于,区域。与引用型参数的差别在于,调用前不需对变调用前不需对变量进行初始化量进行初始化。输出型参数用于传递方法

29、返回的数。输出型参数用于传递方法返回的数据。据。方法参数的传递方式值类型值类型引用类型引用类型变量中存放变量中存放真正的数据真正的数据指向数据的指针指向数据的指针内存空间分配内存空间分配堆栈堆栈托管堆托管堆内存需求内存需求一般来说较少一般来说较少较大较大执行效能执行效能较快(但装箱拆箱时会较快(但装箱拆箱时会降低效能)降低效能)较慢较慢内存释放时间内存释放时间点点执行超过变量的作用域执行超过变量的作用域由回收站负责回收由回收站负责回收可以为可以为 null不可以不可以可以可以数组型参数static int Sum(params int varArr)int sum=0;foreach(int

30、va in varArr)sum+=va;return sum;static void Main(string args)int sum1=Sum(1,2);int sum2=Sum(1,2,3);int sum3=Sum(3,10,7,9,11);Console.WriteLine(sum1=0;nsum2=1;nsum3=2,sum1,sum2,sum3);Console.ReadLine();参数的个数由调用方法决定,是可以变参数的个数由调用方法决定,是可以变化的。化的。数组型参数使用类的静态成员使用类的静态成员 类可以具有静态的成员,如静态字段、静态方法类可以具有静态的成员,如静态字段

31、、静态方法类可以具有静态的成员,如静态字段、静态方法类可以具有静态的成员,如静态字段、静态方法 使用使用使用使用 static static static static 关键字修饰关键字修饰关键字修饰关键字修饰 静态成员相当于静态成员相当于静态成员相当于静态成员相当于“全局全局全局全局”的,不依赖于某一个具的,不依赖于某一个具的,不依赖于某一个具的,不依赖于某一个具体的对象体的对象体的对象体的对象类的静态字段类的静态字段 static static static static 修饰类的字段时,在一个类中只开辟一块修饰类的字段时,在一个类中只开辟一块修饰类的字段时,在一个类中只开辟一块修饰类的字

32、段时,在一个类中只开辟一块内存空间存储,并在类的所有对象实例间共享,因内存空间存储,并在类的所有对象实例间共享,因内存空间存储,并在类的所有对象实例间共享,因内存空间存储,并在类的所有对象实例间共享,因此此此此static static static static 变量也称为类变量变量也称为类变量变量也称为类变量变量也称为类变量class Cat string name;static string food;cat1cat1namenamecat2cat2namenamecat3cat3namenamecat4cat4namenamefoodfood类的静态字段类的静态字段 staticsta

33、ticstaticstatic变量不依赖于具体对象,变量不依赖于具体对象,变量不依赖于具体对象,变量不依赖于具体对象,因此因此因此因此直接直接直接直接通过类名通过类名通过类名通过类名访访访访问问问问。非静态变量非静态变量非静态变量非静态变量必须首先实例化类的一个对象,再通过必须首先实例化类的一个对象,再通过必须首先实例化类的一个对象,再通过必须首先实例化类的一个对象,再通过对象访问,因此也称为对象访问,因此也称为对象访问,因此也称为对象访问,因此也称为实例变量实例变量实例变量实例变量。class Cat string name;static string food;static void Ma

34、in()Cat.food=“fish”;/OK Cat.name=“Kitty”;/错误错误 Cat cat1=new Cat();cat1.name=“Kitty”;/OK类的静态字段类的静态字段 staticstaticstaticstatic变量类似于变量类似于变量类似于变量类似于C C C C语言的全局变量语言的全局变量语言的全局变量语言的全局变量 由于在所有的对象间共享,因此可以用于对象之由于在所有的对象间共享,因此可以用于对象之由于在所有的对象间共享,因此可以用于对象之由于在所有的对象间共享,因此可以用于对象之间的通信间的通信间的通信间的通信 思考题:思考题:思考题:思考题:怎样统

35、计被创建的怎样统计被创建的怎样统计被创建的怎样统计被创建的CatCatCatCat对象的总数?对象的总数?对象的总数?对象的总数?class Cat public static int count;public string name;public Cat()count+;1 1cat1cat12 2cat2cat23 3cat3cat34 4cat4cat4count count =4=4示例:使用静态变量记录进入会场的人数示例:使用静态变量记录进入会场的人数class People private int num;/记录进记录进入会入会场场的次序的次序 static int total;/

36、记录进记录进入会入会场场的的总总人数人数 public People()/无参构造函数无参构造函数 total+;num=total;public static void ShowTotalPeople()Console.WriteLine(现现在共有在共有0人人进进入会入会场场,total);public void ShowPeopleNum(string p_name)Console.WriteLine(0是第是第1个个进进入会入会场场的人!的人!,p_name,num);示例:使用静态变量记录进入会场的人数示例:使用静态变量记录进入会场的人数class Program static vo

37、id Main(string args)People LiLei=new People();LiLei.ShowPeopleNum(LiLei);People.ShowTotalPeople();People Ming=new People();Ming.ShowPeopleNum(Ming);People.ShowTotalPeople();Console.ReadLine();类的静态方法类的静态方法 staticstaticstaticstatic修饰的方法称为静态方法,是一个类的修饰的方法称为静态方法,是一个类的修饰的方法称为静态方法,是一个类的修饰的方法称为静态方法,是一个类的全局方

38、法全局方法全局方法全局方法 静态方法也叫作类方法,静态方法也叫作类方法,静态方法也叫作类方法,静态方法也叫作类方法,类名类名类名类名.方法名方法名方法名方法名 没有没有没有没有staticstaticstaticstatic修饰的方法叫实例方法,修饰的方法叫实例方法,修饰的方法叫实例方法,修饰的方法叫实例方法,对象名对象名对象名对象名.方法名方法名方法名方法名 注意事项:注意事项:注意事项:注意事项:w wstaticstaticstaticstatic方法中不能直接使用非静态成员,因为非静态方法中不能直接使用非静态成员,因为非静态方法中不能直接使用非静态成员,因为非静态方法中不能直接使用非静

39、态成员,因为非静态成员与实例相关,但可以通过对象点取间接使用成员与实例相关,但可以通过对象点取间接使用成员与实例相关,但可以通过对象点取间接使用成员与实例相关,但可以通过对象点取间接使用w wstaticstaticstaticstatic方法中不能使用方法中不能使用方法中不能使用方法中不能使用thisthisthisthis(与实例相关)(与实例相关)(与实例相关)(与实例相关)w w非非非非staticstaticstaticstatic方法中可以使用静态成员方法中可以使用静态成员方法中可以使用静态成员方法中可以使用静态成员思考题思考题利用学过的面向对象知识,改造之前做过的简单利用学过的面

40、向对象知识,改造之前做过的简单计算器程序。将计算器的各种运算的实现部分放在计算器程序。将计算器的各种运算的实现部分放在计算器计算器(Caculator)类里。类里。class Caculator public static double GetResult(double num1,ref double num2,string op)double result=0;switch(op)case+:result=num1+num2;break;case-:result=num1-num2;break;case*:result=num1*num2;break;case/:while(num2=0)C

41、onsole.WriteLine(除数不能除数不能为为0,请请重新重新输输入:入:);num2=double.Parse(Console.ReadLine();result=num1/num2;break;return result;static void Main(string args)double num1,num2,result=0;Console.WriteLine(请输请输入第一个数:入第一个数:);num1=double.Parse(Console.ReadLine();Console.WriteLine(请输请输入第二个数:入第二个数:);num2=double.Parse(C

42、onsole.ReadLine();Console.WriteLine(请输请输入一个运算符(入一个运算符(+,-,*或、):或、):);string op=Console.ReadLine();result=Caculator.GetResult(num1,ref num2,op);Console.WriteLine(012=3,num1,op,num2,result);Console.ReadLine();继承qC#C#支持类的单继承,子类可以继承支持类的单继承,子类可以继承已有的基类已有的基类的的特征和能力特征和能力,而且,而且可以可以加入加入新的特性或者是修改新的特性或者是修改已有的特

43、性已有的特性。q 类继承的基本语法是:类继承的基本语法是:class 子类名称子类名称 :父类名父类名 类的主体类的主体q说明说明:(1)(1)子类将从父类继承而来的成员变量和方法作为自己的成子类将从父类继承而来的成员变量和方法作为自己的成员变量和方法;员变量和方法;(2)(2)子类不能继承父类中用子类不能继承父类中用privateprivate 修饰的成员变量和方法。修饰的成员变量和方法。classclass StudentStudent publicpublic staticstatic stringstring sClassName=sClassName=软软件班件班;/静静态态字段,成

44、字段,成员员变变量量 publicpublic stringstring SName=SName=王王丽丽;/公有字段公有字段 privateprivate intint age=6;age=6;/私有字段,不能被私有字段,不能被继继承承 protectedprotected stringstring sex;sex;/受保受保护护的成的成员员字段字段 publicpublic voidvoid WriteAge()WriteAge()/公有成公有成员员方法方法 ConsoleConsole.WriteLine(.WriteLine(thisthis.age);.age);privatepri

45、vate voidvoid WriteSName()WriteSName()/私有成私有成员员方法,不被方法,不被继继承承 ConsoleConsole.WriteLine(SName);.WriteLine(SName);publicpublic Student(Student(intint _Age,_Age,stringstring _Name)_Name)/代参构造函数代参构造函数 age=_Age;age=_Age;SName=_Name;SName=_Name;声明父声明父类类StudentStudent声明子声明子类类CStudentCStudentclassclass CStu

46、dentCStudent:StudentStudent privateprivate stringstring Department;Department;/子子类类私有成私有成员变员变量量 publicpublic CStudent(CStudent(stringstring _department,_department,stringstring _name,_name,stringstring _sex):_sex):basebase(25,(25,TOMTOM)Department=_department;Department=_department;SName=_name;SName

47、=_name;sex=_sex;sex=_sex;publicpublic voidvoid WriteCStudentInfo()WriteCStudentInfo()ConsoleConsole.WriteLine(.WriteLine(0,1,2,30,1,2,3,SName,sex,SName,sex,Department,sClassName);Department,sClassName);WriteAge();WriteAge();父类成员父类成员继承继承子类构造函数子类构造函数调用父类构造函数调用父类构造函数Main()Main()函数函数classclass ProgramPr

48、ogram staticstatic voidvoid Main(Main(stringstring args)args)CStudentCStudent cs=cs=newnew CStudentCStudent(ComputerComputer,LilyLily,femalefemale););cs.WriteCStudentInfo();cs.WriteCStudentInfo();ConsoleConsole.ReadLine();.ReadLine();C#子类初始化顺序1 1)子类先初始化成员变量后构造函数,调用父类成)子类先初始化成员变量后构造函数,调用父类成员后构造员后构造 2

49、 2)类本身成员先于构造类本身成员先于构造 3 3)父类构造先于子类构造父类构造先于子类构造 4 4)静态先于成员)静态先于成员 5 5)静态内部按出现顺序)静态内部按出现顺序 6 6)成员内部按出现顺序)成员内部按出现顺序 子类与父类构造函数的执行顺序子类与父类构造函数的执行顺序1)实例化父类时实例化父类时,可以使用,可以使用new子类子类,执行构造函,执行构造函数顺序为:数顺序为:先执行父类构造函数先执行父类构造函数,再执行子类构造函再执行子类构造函数数。2)实例化子类时实例化子类时,只可以,只可以new子类,执行顺序同上子类,执行顺序同上3)父类实例化后,)父类实例化后,只能只能执行父类

50、的方法,获得父类执行父类的方法,获得父类的属性等。的属性等。4)实例化子类后,)实例化子类后,可同时可同时执行子类和父类的方法和执行子类和父类的方法和属性,如属性,如同名方法同名方法,则执行子类的方法。,则执行子类的方法。base关键字 在类的继承中,如果在在类的继承中,如果在子类中定义了与父类同名的子类中定义了与父类同名的成员变量成员变量,则父类的成员变量不能被直接使用,此时,则父类的成员变量不能被直接使用,此时称子类的成员变量隐藏了父类的成员变量。称子类的成员变量隐藏了父类的成员变量。如果如果想在子类中使用被子类隐藏的父类的成员变想在子类中使用被子类隐藏的父类的成员变量或方法量或方法,可以

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁