1、4 4类和对象类和对象4.14.1类和对象的概念类和对象的概念 类的概念是为了让程序设计语言能更清楚的描述日常生活的事物,类是对现实世界中一系列具有相同性质的事物的总称,是对具有共同数据和行为的一类事物的抽象描述。共同数据被描述为类中的数据成员,共同行为被描述为类中的方法成员;对象则是实际存在的属该类事物的具体个体。因而也称实例()。下面是一个“汽车类”和“汽车实例”的例子人类人类张三张三李四李四王五王五类类对象对象工作吃饭学习身高年龄.性别人属性行为4类和对象类和对象4.1类和对象的概念类和对象的概念 类类=(算法(算法+数据结构)数据结构)面向对象程序的结构特点面向对象程序的结构特点程序程
2、序=(类(类+类类+)封装行封装行类类为用户提供对象的属性和行为的接口用户通过这些接口使用这些类,无须知道这些类的内部如何构造的。不能操作类中的内部数据将内部数据隐藏4.2 面向对象程序设计语言的三大原则面向对象程序设计语言的三大原则案例:人操作机器的例子案例:人操作机器的例子人通过几个按钮就可以享受机器提供的服务了机器可看作是一个对象继承性继承性4.2 面向对象程序设计语言的三大原则面向对象程序设计语言的三大原则继承描述子类与父类之间的一种关系,通过继承,子类既保留了父类原有的功能,又可以根据需求进行相应的扩展。多态多态4.2 面向对象程序设计语言的三大原则面向对象程序设计语言的三大原则多态
3、指的是多个对象对于同一个指令,有各自的理解,产生不同的行为。Cut演员停止表演理发师剪发他们表现的形态是不同形态是不同的!4.34.3、类的定义类的定义在中,类可以使用关键字来定义,类的声明格式如下:访问修饰符 类名 类的成员定义 其中,其中,访问修饰符访问修饰符 关键字可选,是变量的作用域,有关键字可选,是变量的作用域,有6 6个关键字可选,这个关键字可选,这6 6个关个关键字含义如下:键字含义如下:全局变量。:全局变量。:私有变量。(默认为):私有变量。(默认为):受保护的变量。(在其子类中可以被访问):受保护的变量。(在其子类中可以被访问):可在同一个链接库中访问。(在所在的程序集中可以
4、被访问):可在同一个链接库中访问。(在所在的程序集中可以被访问):密封类,不允许被继承。:密封类,不允许被继承。:抽象类,不允许建立类的实例。:抽象类,不允许建立类的实例。说明:访问修饰符中说明:访问修饰符中 1-4为访问权限修饰符,类的修饰符可以为为访问权限修饰符,类的修饰符可以为 或者或者 但但通常为,当一个类没有写修饰符时其访问权限为,当一个类的成员没有通常为,当一个类没有写修饰符时其访问权限为,当一个类的成员没有写修饰符时其访问权限为写修饰符时其访问权限为4.44.4、对象的定义、对象的定义例如,通过学生类,可以创建一个学生对象的代码如下所示。=();上面代码中,“”是对象名称,“”是
5、类名称。通过关键字把实例化为。n 字段(成员变量)n 属性(*)n 属性的作用就是保护字段,对字段的设置和取值进行限定。n 方法n 事件4.44.4类的成员类的成员类通常包括以下三类成员:类通常包括以下三类成员:4.54.5类的成员类的成员创建成员变量(字段)创建成员变量(字段)类的特性可以通过成员变量体现出来。如果成员变量的修饰类的特性可以通过成员变量体现出来。如果成员变量的修饰符是,则在创建类的实例时,就可以直接访问。如果成员变符是,则在创建类的实例时,就可以直接访问。如果成员变量的修饰符是,则该成员变量只能在类的内部访问。量的修饰符是,则该成员变量只能在类的内部访问。如创建长方体类的成员
6、变量方法如下。说明:通常情况下,如创建长方体类的成员变量方法如下。说明:通常情况下,类的成员变量都是类的成员变量都是 ;.2022-12-24自动属性自动属性 ;2.支持成员变量的属性支持成员变量的属性 ;(0)=0;=;只读属性只读属性 2.只写属性只写属性 ;(0)=0;=;创建属性(创建属性(*)说明:属性的访问权限都是说明:属性的访问权限都是4.54.5类的成员类的成员2022-12-244.54.5类的成员类的成员例4.4 自定义一个类,在该类中定义一个可读、可写的属性,然后在该属性的访问器中对属性的值进行判断,如何的值在18到30之间为合理,对进行赋值,否则输出一个固定值为20;3
7、创建方法创建方法 通过方法可以封装一段功能完整的代码,这样有利于代码的复通过方法可以封装一段功能完整的代码,这样有利于代码的复用性。如计算一个圆的面积时,如果我们把计算公式封装在一个方用性。如计算一个圆的面积时,如果我们把计算公式封装在一个方法中,在调用时可以通过传递不同的半径参数而获取不同的面积。法中,在调用时可以通过传递不同的半径参数而获取不同的面积。创建方法的语法格式如下所示。创建方法的语法格式如下所示。作用域作用域返回类型返回类型 方法名方法名()方法体;方法体;4.5类的成员类的成员4.5 4.5 类的成员类的成员例例4.5、编写程序计算出长方体的体积。、编写程序计算出长方体的体积。
8、在在2010中创建一个控制台应用程序。右键单击项目名称,中创建一个控制台应用程序。右键单击项目名称,在弹出的菜单中选择在弹出的菜单中选择“添加添加”/“类类”命令,创建一个类。在命令,创建一个类。在类中创建长方体的成员变量,并创建计算体积的方法类中创建长方体的成员变量,并创建计算体积的方法()。主要核心代码:主要核心代码:创建类 ;()定义返回值类型为型的方法 ;=*;4.5 4.5 类的成员类的成员主程序核心代码:=();初始化对象 =3.50;=2.40;=5.50;(长方体的体积为:0();();在入口程序中初始化对象,设置对象的属性,即分别为类中的三个变量赋值,并调用()方法求得长方体
9、体积。编译并执行代码,运行结果如图所示。4.64.6方法中的参数方法中的参数 参数是方法中的重要元素,基本语法格式如下所示。作用域返回类型 方法名(数据类型 参数1,数据类型 参数2,.)方法体;一个方法的参数可以是一个或多个,每个参数之间用逗号分隔,每个参数必须指明具体的参数类型。方法的参数分为引用类型和数值类型,引用类型传递的是变量在内存中的地址,而不是变量的值,数值类型传递的是变量的值;在中引用类型有类、数组、接口和委托;数值类型有结构体、枚举和其它简单数值类型等;数值类型进行参数进行传递时如果要传递地址,在中通常采用或者关键字进行参数的传递。当采用或者关键字进行传递参数时,这个参数就是
10、原数值或者引用本身(也就是说在函数体内对该参数的所有操作都是原数镇或者引用本身)1、引用参数能够将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出方法(相当于是参数的地址)。参数要求在方法外必须为其赋值,而方法内可以不赋值。4.6 方法中的参数方法中的参数说明:不管是调用还是定义带有参数的方法时,必须要在参数先前面加上 2、输出参数如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,我们可以考虑使用参数。参数在进行参数传递前可以不对其赋值。参数不要求在方法外必须为其赋值,在方法体中必须赋值,并
11、且参数只有赋值之后才能对其进行相关操作说明:不管是调用还是定义带有参数的方法时,必须要在参数先前面加上4.64.6方法中的参数方法中的参数关键字和的区别关键字和的区别关键字和都可以用于参数的引用方式的传递,并且都适合于返回多个值关键字和都可以用于参数的引用方式的传递,并且都适合于返回多个值的应用。它们不同之处是哪个关键字负责初始化参数。如果一个方法的应用。它们不同之处是哪个关键字负责初始化参数。如果一个方法的参数被修饰,那么调用代码在调用方法之前必须初始化参数,被调的参数被修饰,那么调用代码在调用方法之前必须初始化参数,被调用方法则可以任意选择读取该参数,或者为该参数赋值;而如果一个用方法则可
12、以任意选择读取该参数,或者为该参数赋值;而如果一个方法的参数被修饰,那么调用代码在调用该方法之前可以不初始化该方法的参数被修饰,那么调用代码在调用该方法之前可以不初始化该参数。参数。引用类型采用或者进行修饰时,在采用参数进行传递时传递的都是地址,引用类型采用或者进行修饰时,在采用参数进行传递时传递的都是地址,所以对于引用类型不需要加或者关键字。所以对于引用类型不需要加或者关键字。4.6 方法中的参数方法中的参数3、可变参数(*)将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。可变参数必须是形参列表中的最后一个元素。4.64.6方法中的参数方法中的参数4.6 4.6 方法中的参数
13、方法中的参数4、方法的重载(*)方法的重载是实现“多态”的一种方法,方法的重载是指调用同一个方法名,但各方法中参数的数据类型、个数不同。方法的重载必须满足以下3个条件:方法名称必须相同;形参个数不同;相同位置上参数的数据类型不同。说明:当一个方法的方法名称相同,参数的个数和相同位置上说明:当一个方法的方法名称相同,参数的个数和相同位置上的参数的数据类型也相同时,但方法的返回值不相同时不但不的参数的数据类型也相同时,但方法的返回值不相同时不但不能构成方法的重载,反而会出错。能构成方法的重载,反而会出错。4.6 4.6 方法中的参数方法中的参数例4-6创建一个窗体应用程序,实现通过输入圆的半径求得
14、圆的周长,输入矩形的长和宽求得矩形的周长,求周长的方法采用重载的方式建立,具体做法如下:创建一个窗体应用程序。程序界面如图所示,其中包括五个标签控件、五个文本框控件和两个按钮控件,按照由上至下,由左自右编号。右键单击项目名称,在弹出的菜单中选择“添加”/“类”命令,创建一个类,类中定义两个同名方法(),其中第一个方法带有参数r,第二个方法带有参数a和b,两个方法中参数个数不同,能够实现方法重载。4.6 4.6 方法中的参数方法中的参数 (r)=3.14;2*r;(b)2*();R=(1);接收文本框1的输入数据调用类中的方法求圆的周长赋值给文本框2 2=(s1(R);A=(3);接收文本框3的
15、输入数据 B=(4);接收文本框4的输入数据调用类中的方法求矩形的周长赋值给文本框5 5=(s1();4.7 4.7 构造函数构造函数1构造函数(*)构造函数是一种特殊的函数,用于初始化类和创建类的实例。构造函数具有与类相同的名称,它通常初始化新对象的数据成员。它是在进行类的实例化时首先执行的函数。构造与普通方法相比,有以下两点不同:构造函数的名称必须与类名相同,并且是一个类可以有一个或多个构造函数;构造函数不能有返回类型(包括类型)构造方法中不能使用语句构造函数的声明语法格式为:类名(数据类型 参数1,数据类型 参数2,.)函数体;说明:当一个类没有显示地定义一个构造函数时,该类有一个默认的
16、无参数的构造函数,但当一个类显示的定义一个构造函数时,这个默认的构造函数就不存在了。说明:在同一个类中一个构造函数调用另外一个构造函数是通过在构造函数的后面加上:(参数列表)来实现的4.7 4.7 构造函数构造函数例4-7定义一个直线类和一个类,这直线类有两个构造函数,其参数分别为x1122(代表两个点的坐标)和 p1、p2(p1和p2分别为类型);由两字段x,y组成。另外类有一个计算器其长度的方法。成员变量与局部变量重名时,如何调用成员变量?如何在类中调用自己的成员方法?如何在构造方法中,调用重载的构造方法?lll这些问题关键字都可以解决!4.8 4.8 关键字关键字1 1、访问属性、访问属
17、性通过关键字可以明确地去访问一个类的属性,解决与局部变量名通过关键字可以明确地去访问一个类的属性,解决与局部变量名称冲突问题。称冲突问题。2 2、访问成员方法、访问成员方法在类中调用自己的成员方法,也可以使用关键字,通过在类中调用自己的成员方法,也可以使用关键字,通过“.“.方法方法名名”的方式调用的方式调用3 3、访问构造方法、访问构造方法在同一个类中一个构造函数调用另外一个构造函数是通过在构造在同一个类中一个构造函数调用另外一个构造函数是通过在构造函数的后面加上:函数的后面加上:(参数列表参数列表)来实现的来实现的4 4、在中通常采用、在中通常采用.产生代码提示功能产生代码提示功能4.8
18、4.8 关键字关键字4.9 4.9 析构函数析构函数2析构函数(只做了解,可以不用理会)析构函数是在类被删除之前最后执行的函数,用来释放基于该类创建实例所占用的资源。在语言中每个类都有一个默认的析构函数,用来在对象被清除时释放所分配的内存资源。析构函数的表示方法为:.()(对象已被删除);析构函数的特点:析构函数是自动调用的,程序员是无法调用的。析构函数没有参数,也没有返回值。一个类只能有一个析构函数,即析构函数不能重载。说明:由于具有自动垃圾回收说明:由于具有自动垃圾回收功能所以在编程中通常不需要功能所以在编程中通常不需要显示地写出析构函数。显示地写出析构函数。垃圾回收垃圾对象编写一个复数类 该复数类有两个字段分别为实部x和虚部y,有一个构造方法和将两个复数进行加、减、乘和除法运算的成员方法,试编写该类。4.10 4.10 应用实例应用实例谢谢!谢谢!