《第5章 类和对象.ppt》由会员分享,可在线阅读,更多相关《第5章 类和对象.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程主讲人:第5章 类和对象2Java程序设计精编教程程序设计精编教程 第第5章章类和对象类和对象3导读导读主要内容主要内容类和对象概述类和对象概述构造方法构造方法类和成员的修饰符类和成员的修饰符this关键字关键字45.1 类和对象概述类和对象概述 l 在面向对象技术中,类(Class)和对象(Object)是最基本、最重要的组成单元。类实际上是对客观世界中某类群体的一些基本特征的抽象。对象表示一个个具体的事物。事物的属性可以用变量描述,行为可以用方法描述。l 类是定义属性和行为的模板,对象是类的实例(instance),对象与类的关系就像变量和数据类型的关系一样。5 5.1.1 类和对象的
2、关系类和对象的关系 类是具备某些共同特征的实体的集合,是对现实生活中某类对象的抽象,既包括数据又包括作用于数据的一组操作。类的数据称为成员变量,反映类的状态和特征;类对数据的操作称为成员方法,反映类的行为和能力。 对象是表示现实世界中某个具体的事物,对象与实体是一一对应的,也就是说万物皆对象,这是一个具体的概念。6成员变量成员方法名字举例说明 5.1.1 类和对象的关系类和对象的关系7计算机世界现实世界 5.1.1 类和对象的关系类和对象的关系8 5.1.2 类的定义类的定义(1)类定义格式-Java中类包括成员变量和成员方法两部分。基本格式 为:类的修饰字class类名(extends父类名
3、称|implements接口名 称变量定义及初始化;声明成员变量方法修饰字返回值的数据类型方法名称(参数1,参数 2.) 程序语句! 定义成员方法return表达式;9说明:(1) class关键字,用于定义类。“class类名”是类的声明部分, 类名必须是合法的Java标识符,通常第一个字母大写,能体现类的功能和作用。(2 )类的修饰字有:public abstract | final 、缺省方式为 friendly。其中,abstract类不能直接产生属于这个类的对象;final类不能被其他任何类所继承;public类不但可以被同一程序包中的其他类使用,别的程序包中的类也可以使用;frie
4、ndly(缺省)类只能被本包中的其他类使用。 5.1.2 类的定义类的定义10(3)Java语言允许对类中定义的各种属性和方法进行访问控制, 即规定不同的保护等级来限制对它们的使用,目的在于实现信息的 封装和隐藏。Java语言为对类中的属性和方法进行有效地访问控制, 将它们分为四个等级:private default、protected public,具体规则 如表5-1。 5.1.2 类的定义类的定义11表5-1 Java类成员的访问控制可否直接访问 控制等级同一个类中同一个包中不同包中 的子类对象任何场合privateYesdefaultYesYesprotectedYesYesYespu
5、blicYesYesYesYes 5.1.2 类的定义类的定义12(4) 每个类都拥有自己的名字空间,即类及其方法和变量可以在 一定的范围内知道彼此的存在,可以使用。(5) 父类继承:extends父类名(见第六章类的继承与多态性)。(6) 接口实现:implements接曰名(见第九章接曰和实现)。(7) 类的目的是抽象出一类实物共有的属性和行为,并用一定的 语法格式来描述所抽象出的属性和行为,即数据以及在数据上所进 行的操作。因此类体的内容由以下两部分构成:变量的声明:存储属性的值(体现对象的属性)。方法的定义:方法可以对类中声明的变量进行操作(体现对 象所具有的行为)。 5.1.2 类的
6、定义类的定义13 5.1.2 类的定义类的定义(2)成员变量 类体屮所声明的变量被称为成员变量。定义格式为:变量修饰字变量数据类型变量名1,变量名2 =变量初值; 例如:定义Dog类14(3)成员方法 方法的定义包括两部分:方法头和方法体。定义格式为: 5.1.2 类的定义类的定义15 例如:定义成员方法bark。public void bark0(System, out. printinC狗在汪汪叫。; 说明:(1) 方法头确定方法的名字、形式参数的名字和类型、返回值的 类型和访问限制;方法体由括号内的声明部分和语句部分组成,描述方法的功能。(2) 类型标识符反映的是方法完成其功能后返回的运
7、算结果的数 据类型,如果方法没有返回值,用void关键字指明。本例中方法 bark()的返回类型为void。 5.1.2 类的定义类的定义16(3) 对于有返回值的方法,方法体中至少含有一条retum语句,其形式为:return (表达式);当调用该方法时,方法的返冋值即此 表达式的值。(4) 方法不能嵌套,即不能在方法中再声明其他方法。(5) 同一个类中的方法可以访问该类的成员变量。(6) 一个类的方法只能访问自己的局部变量。 5.1.2 类的定义类的定义17 例如:定义成员方法bark。public void bark0(System, out. printinC狗在汪汪叫。; 说明:(1
8、) 方法头确定方法的名字、形式参数的名字和类型、返回值的 类型和访问限制;方法体由括号内的声明部分和语句部分组成,描 述方法的功能。(2) 类型标识符反映的是方法完成其功能后返回的运算结果的数 据类型,如果方法没有返回值,用void关键字指明。本例中方法 bark()的返回类型为void。 5.1.2 类的定义类的定义18(3) 对于有返回值的方法,方法体中至少含有一条retum语句,其形式为:return (表达式);当调用该方法时,方法的返冋值即此 表达式的值。(4) 方法不能嵌套,即不能在方法中再声明其他方法。(5) 同一个类中的方法可以访问该类的成员变量。(6) 一个类的方法只能访问自
9、己的局部变量。 5.1.2 类的定义类的定义19 5.1.2 类的定义类的定义-例5.1定义Dog类,并设置其属性和方法。在上面的程序屮,Dog类定义了name、age和color三个属性,分别表示狗的姓名、年龄和毛发颜色,然后定义了一个bark()方法,表明狗有汪汪叫的能力。20(1)对象的创建创建对象的步骤包括:对象的声明;对象的实例化及对象的初始化。基本格式: 5.1.3 对象的创建、使用及清除对象的创建、使用及清除21 说明:(1) 当创建一个类时,只是创建了一种新的数据类型。对象是 类的一个实例。(2) 使用new运算符实例化对象。(3) 实例化对象时,向内存申请存储空间,并同时调用
10、类的构造方法对对象进行初始化(构造方法见第5.2节) 5.1.3 对象的创建、使用及清除对象的创建、使用及清除22 5.1.3 对象的创建、使用及清除对象的创建、使用及清除例5.2定义DogTest类,创建并实例化该类的一个对象该程序是在例5.1的基础上创建并实例化DogTest类的一个对象dog23 5.1.3 对象的创建、使用及清除对象的创建、使用及清除(2)对象的使用在程序中创建对象的目的是使用对象。创建一个对象 就要为对象的各个成员变量分配存储空间,可以通过 引用对象的成员来使用对象。-对象数据成员的引用方式如下:-对象成员方法的引用方式如下:24 5.1.3 对象的创建、使用及清除对
11、象的创建、使用及清除例5.3定义DogTestl类,创建该类对象dog,使用该对象 并输岀相应信息。程序运行结果:dog阿黄的年龄:3,毛发的颜色:黄色狗在汪汪叫25 5.1.3 对象的创建、使用及清除对象的创建、使用及清除(3)对象的清除基本格式为:说明:一个类只有一个finalize方法,没有返冋值。26 5.1.3 对象的创建、使用及清除对象的创建、使用及清除下面对前面介绍的类的定义、对象的定义梳理一下(即例5.3),程序框架如下:5.2构造方法-类中有一种特殊的方法,其方法名与类名相同,称为 构造方法。当使用new运算符实例化一个对象时,系统 为对象创建内存区域并自动调用构造方法初始化
12、成员 变量。-构造方法定义格式如下:说明:(1) 构造方法的名称必须与类名相同;主要用于对象的初始化;(2) 构造方法的声明处不能有任何返回值类型的声明;(3) 不能在构造方法中使用retum语句返回一个值;(4) 构造方法不能直接调用,用new创建对象时自动调用;(5) 一个类中可以定义多个构造方法,但是构造方法的参数表不 能相同,即各构造方法的参数个数不同或参数类型不同;(6) 当一个类没有构造方法的时候,Java自动为该类生成一个默 认的构造方法,默认构造方法没有参数。但是,当一个类定义了构造方法时,默认构造方法将不会被提供。5.2 构造方法5.2构造方法例5.4针对例5.1的Dog类,
13、定义构造方法。DogTest2类中定义了三个成员变量:name、color和age, DogTest2 (String name I, String colorl, int agel)是其构造函数,实现对象的初始化。例5.5定义PersonTest类,使用默认构造方法创建对象,并打印输岀对象的信息。5.2构造方法程序运行结果:null null 0李小红太原市24例5.6定义多个构造方法,根据参数不同,调用相应的 构造方法。程序运行结果:张小白14李小红5.2构造方法分析:对比例5.5和例5.6可知,当程序中没有明确定义构造函数时,系 统会调用默认构造方法对成员变量用默认值进行初始化(字符串型
14、 变量的默认值为null,数值型变量的默认值为0),如例5.5。当程序 中明确定义了构造函数,在main。方法中实例化对象pl、p2时,根据 所提供的实参个数调用相应的构造方法,对其成员变量进行初始化,如例5.6。5.2构造方法拓展练习设计一个表示学生的Student类,类屮的变量有姓名、学号和记录 学生数量的变量,定义类的3个构造方法(无参、为姓名赋值、为姓 名和学号赋值)、返回类信息的方法,编写应用程序设置两个 Student类的对象。5.2构造方法第五章 类和对象5.1类和对象概述5.2构造方法5.3类和成员的修饰符5.4 this关键字5.5本章小结在定义类和类的成员时,可以使用一些修
15、饰符,对类 和成员的使用做某些限定。一般将修饰符分为两类: 访问控制符和非访问控制符。访问控制符有public protected private等,给予对象 一定的访问权限,实现类和类中成员的信息隐藏。非访问控制符的作用各不相同,有static、final abstract等。某些修饰符只能应用于类的成员,某些修 饰符既可应用于类,也可应用于类成员。5.3 类和成员的修饰符类和成员的修饰符5.3.1 static 修饰符(1) 静态成员变量(2) 静态成员方法5.3.2 final 修饰符(1) 在类的声明中使用final(2) 在成员方法声明中使用final(3) 在成员变量的声明中使用f
16、inal5.3 类和成员的修饰符类和成员的修饰符静态成员是属于类的,而不属于一个具体的类对象。 静态成员需要使用static修饰,包括静态变量和静态方 法。通过类名可以直接访问静态成员变量,调用静态成员 方法。即使没有创建对象,也可以引用静态成员。静态成员也可以通过对象名引用。在不同的类对象中 访问的静态成员是同一个存储区域。5.3.1 static修饰符修饰符(1)静态成员变量例5.7 static修饰成员变量举例。此程序中name、address和count都是成员变量,而count用static修饰为静态成员变量,用于统计学生人数。5.3.1 static修饰符修饰符说明:(1) 在声明
17、静态成员变量时必须使用static修饰变量;(2) 系统仅为静态成员变量分配一个存储单元,所有对象共享一 个成员变量。若某个对象修改了静态成员变量的值,所有对象使用 的都将是修改了的静态成员变量值。例如,创建两个对象si和s2:Student si =new Student(“张小白”,”太原”);Student s2 = new Student(“李小红”,“北京”);s 1 .name和s2.name分别占据不同的存储空间,s 1 .address和 s2.address也分别占据不同的存储空间,但count只有一个存储空间, si和s2共享该存储单元。5.3.1 static修饰符修饰符
18、(3)静态成员变量属于类,既可以通过类名访问,也可以通过对象名访问。访问格式如下:对象名.静态成员变量名;或类名.静态成员变量名;5.3.1 static修饰符修饰符(2)静态成员方法例5.8 static修饰成员方法举例。定义Rectangle类,设计 相应的方法计算其周长和面积并打印输出计算结果。其中,pcrimctcr(doublc x 1, double y 1)是成员方法,area(doublc x 1, double yl)用static修饰为静态成员方法。该程序是计算并返冋矩形的 周长和面积。5.3.1 static修饰符修饰符说明:(1) 静态成员方法必须使用static修饰;
19、(2) 静态成员方法中除使用本方法中声明的局部变量外,只可以 访问静态成员变量,不能访问非静态成员变量。(3) 静态成员方法中只能调用静态成员方法,不能调用非静态成 员方法。如果将print_message()改为:static void print_message()System.out.println(perimeter(2.3,4.5); 编译出错System.out.println(area(2.3,4.5);5.3.1 static修饰符修饰符将不能通过编译,在静态成员方法中,不能调用非静态成员方法 perimeter()。在以前的例子中,由于main()是静态成员变量,所以在mai
20、n()方法中,只能调用静态成员方法。(4)静态成员方法可以通过类名访问,即不需要实例化就可以调 用静态成员方法,同时也可以通过对象名访问。访问格式如下:5.3.1 static修饰符修饰符拓展练习设计一个Rectangle类,添加属性widthheight,在类中定义两个 方法计算矩形周R和面积,编写应用程序在屏幕上输出矩形的周长 和面积(要求不用创建类的对象)。5.3.1 static修饰符修饰符(l)在类的声明中使用finalJava允许在类的声明中使用final关键字。被定义成final 的类不能派生出子类。例如,类就是一个 final类,这保证对String对象方法的调用确实运行的是
21、String类的方法,而不是其子类重写后的方法。如果一个 类不需要有子类,类的实现细节不允许改变,并且确信 这个类不会被扩展,那么就将其设计为final类。5.3.2 hnal修饰符修饰符5.3.2 hnal修饰符修饰符(2)在成员方法声明中使用final 类的成员方法中被定义成final的方法不能被重写。当方法的实现不能被改变,或者方法对保证对象状态的一致 性很关键时,应该把该方法定义为final。使用final修饰的方法可以将方法锁定,防止任何继承类修改它的意义和 实现。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。5.3.2 hnal修饰符修饰符(3)在成员变量的声
22、明中使用final类的成员变量中被定义成final的变量不能被改变。因 此可以通过声明变量为final并同时赋初值来定义常量,并 且变量名一般大写。例如:5.3.2 hnal修饰符修饰符final int NUM = 10;说明:(1) final类不能被继承,即final类无子类。(2) final方法不能被覆盖,即子类的方法名不能与父类的final方法名相同。5.3.2 hnal修饰符修饰符static final double PI = 3.1415;(3) final变量实际上是Java语言的符号常量,可以在定义时赋初 值或在定义后的其他地方赋初值,但不能再次赋值,习惯上使用大 写的标
23、识符表示final变量。例如:final double PI = 3.1415;final double G = 9.28;因为final变量不能改变,没有必要在每个对象中进行存储,可以将final变量声明为静态的,以节省存储空间。例如:第五章 类和对象5.1类和对象概述5.2构造方法5.3类和成员的修饰符5.4 this关键字5.5本章小结在Java中this关键字可能是很难理解的,因为其用法比 较灵活。使用this可以引用当前对象的成员变量、成员 方法和构造方法,同时还可以指代对象本身。5.4 this 关键字关键字5.4 this 关键字关键字访问成员变量5.4.2调用成员方法5.4.3
24、调用构造方法指代对象本身例5.9先看下面一段程序:5.4.1 访问成员变量访问成员变量从程序的运行结果姓名:null,年龄:0中可以看出,并没有把构造方法传递进去的参数赋给成员变量。这是由于在赋值时成员变量 并没有明确地被指出,所以造成错误,而此错误可以用this关键字解决。如例5.10。5.4.1 访问成员变量访问成员变量例5.10使用this关键字访问成员变量name和age,实现程序功能。程序运行结果:姓名:张小白,年龄:33。54-说明:通过this引用成员变量的形式如下:当成员方法中没有与成员变量同名的参数时,this可以省略。但 当成员方法中存在与成员变量同名的参数时,引用成员变量
25、时其名 前的this不能省略,因为成员方法中缺省的是引用方法中的参数。5.4.1 访问成员变量访问成员变量 拓展练习设计一个Dog类,有名字、毛发颜色、年龄、爱好等属性,定义 构造方法来初始化类的这些属性(要求使用this关键字),定义方法 输出Dog信息,编写应用程序使用Dog类。5.4.1 访问成员变量访问成员变量例5.11 this关键字访问成员方法举例。5.4.2 调用成员方法调用成员方法程序运行结果:姓名:李小红,年龄:305.4.2 调用成员方法调用成员方法说明:通过this调用成员方法的形式如下:其中,成员方法名前的this可以省略。5.4.3 调用构造方法调用构造方法-例5.1
26、2 this关键字调用类的构造方法举例。程序运行结果: 产生一个新的Person对象。 姓名:黄小仙,年龄:365.4.3 调用构造方法调用构造方法说明:(1) 在构造方法中,可以通过this调用本类中具有不同参数表的构造方法。调用形式如下:(2) 使用this调用构造方法的语句必须也只能放在构造方法的首行。若程序如下,会出现编译错误。this(参数表)5.4.4 指代对象本身指代对象本身 例5.13 this用于指代对象本身。在类Person中,声明了成员变量age;定义了成员函数getAge()、 setAge(int age)和equals(Person pl)o 其中,setAge(i
27、nl age)的参数age与 成员变量age同名,因此,引用成员变量时其名前的this不可省,即 this.age=age;在equals(Person pl)方法中,this代表了对象pl。第五章 类和对象5.1类和对象概述5.2构造方法5.3类和成员的修饰符5.4 this关键字5.5本章小结625.5本章小结-Java语言中类的含义,类的声明,类的成员组成及类 的封装过程;对象的实例化,成员访问和对象的构造及回收;类中构造方法的定义、定义类和成员时的修饰符,this 关键字的用法。-学习本章之后,学生应能理解类和对象的概念,熟练 使用类及其成员的访问控制方法,掌握类的各种构造 方法,为后续深入学习面向对象编程方法打好基础。