《Java教程》-单元3教学材料_第1页
《Java教程》-单元3教学材料_第2页
《Java教程》-单元3教学材料_第3页
《Java教程》-单元3教学材料_第4页
《Java教程》-单元3教学材料_第5页
已阅读5页,还剩144页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务3.1描述“人”信息程序设计

3.1.1类与对象的概念与关系1.对象的概念对象(object)是系统中用来描述客观事物的一个实体,对象构成系统的一个基本单位。对象是有形的,如某个人、某种物品,例如:电视机对象具有“样式”“颜色”“大小”等特征,具备“放映”“开关”“设置”等功能(行为)。对象也可以是无形的,如某项计划、某次商业交易。上一页下一页返回任务3.1描述“人”信息程序设计

对象包含特征和行为,特征指对象的外观、性质、属性等;行为指对象具有的功能、动作等。例如,一个名字叫张三的同学就是一个对象。他具有自己的特征:学号=1,姓名=“张三”,出生年月=“1994-10-18”,家庭住址=“中国山东省济南市”。他具有上课、做作业、休息等行为。上一页下一页返回任务3.1描述“人”信息程序设计

2.类的概念人们习惯对日常生活中的事物进行归纳、划分,然后分类,这是在认识客观世界时经常采用的思维方法。换句话说,类是从日常生活中抽象出来的具有共同特征的实体,因此把具有相同特征及相同行为的一组对象称为类(classofobject),使用第一个英文单词class作为描述类的Java关键字,Java语言中类是为了描述具体对象而存在的。分类的原则是抽象,面向对象思想中类是同种对象的集合与抽象。例如,家用轿车、公交车、货车等都属于汽车类,并且通过比较、总结等抽象思维方式可以发现不同的车之间存在共同的特点。因此,为了能够方便地了解和描述这些实际存在的实体,在面向对象思想中引入了类的概念,用于对所有对象提供统一的抽象描述,其内部包括属性和方法两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位。上一页下一页返回任务3.1描述“人”信息程序设计

3.类与对象的关系由上面讲述的类和对象的概念可以看出:类中的属性对应对象的特征,类中的方法则对应对象的行为。因此,类是一组有共同性质的对象集合,而对象是类的具体实例。类与对象的关系(图3-2)就如同模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。类是广泛的概念,表示一个有共同性质的群体,而对象指的是一个具体的东西。总的来说,“对象是类的实例,类是对象(们)的抽象”。例如:张三同学是一个对象,李四同学也是一个对象,并且全班的同学都有学号、姓名、出生年月、家庭住址等特征,具有上课、做作业、休息等行为。从整个班级所有的对象中抽象出共同的特征和行为就可以形成人们常说的“学生”类,此时,学生就是一个类。上一页下一页返回任务3.1描述“人”信息程序设计

“学生”是一个类,它可以表示班级中的所有学生,而“张三”“李四”则是实际存在的单个对象,或者说它们是“学生”这个类的实例。在Java语言中,可以先定义类,然后创建类的对象。3.1.2类的定义类是Java语言的基本单位,任何一个Java程序都由类组成,设计程序需要先从现实问题中找出可实现的类,并用Java语句进行定义。类是一个独立的单位,每个类都有一个类名,其内部包括成员变量,用于描述属性;还包括类的成员方法,用于描述行为。因此,类也被认为是一种抽象数据类型,这种数据类型不但包括数据,还包括方法。上一页下一页返回任务3.1描述“人”信息程序设计

1.类的格式类是通过关键字class来定义的,在class关键字后面加上类的名称即可定义一个类,在类中可以定义类的成员变量和方法。类的定义格式如下:上一页下一页返回任务3.1描述“人”信息程序设计

注释:(1)修饰符。修饰类的修饰符有public、abstract和final,这些修饰符将在后面的任务中介绍。包含main()方法的主类必须定义为public。(2)class关键字。class为Java定义类的关键字,必须写在修饰符和类名中间,使用空格隔开,并且不能改变任何字符的大/小写,如Class是错误的。(3)类名。类的名字要符合Java的命名规范,同时名字要有意义,能够反映类的内容,第一个字母一般为大写。实例3-1用Java类的定义描述汽车。代码如下:上一页下一页返回任务3.1描述“人”信息程序设计

2.类的成员变量和方法类的成员变量用于描述类的属性,成员变量多数以名词的形式出现,如姓名、颜色、大小等。类的成员变量一般是简单数据类型,也可以是对象、数组等复杂数据类型。类包括属性和方法两部分。属性(成员变量)用于描述从对象中抽象出来的特征项。方法(成员方法)用于描述从对象中抽象出来的特征行为。例如,从所有同学中抽象出来的学号(stuNo)、姓名(stuName)、出生年月(stuBirth⁃day)、家庭住址(stuAddress),称为“学生”类的成员变量。从所有同学中抽象出来的上课、做作业、课后活动、休息等行为称为“学生”类的方法。上一页下一页返回任务3.1描述“人”信息程序设计

类的成员变量声明格式如下:例如:publicStringname="Jack";intage=10;成员变量的修饰符包括public、private、protected、static、final。修饰符用于确定成员变量的被访问范围以及创建过程。例如,public表示该成员变量可以被自己和其他类访问;而static表示静态变量,其创建过程不需要实例化对象,具体含义及用法在后续任务中会详细讲解。上一页下一页返回任务3.1描述“人”信息程序设计

类的方法又称为成员方法,用于描述动作、行为和功能,因此,方法大多以动词形式出现,如吃、学习、启动等。方法包括名称、返回值、参数三个要素,以及方法修饰符和一段用于完成某项动作或功能的方法体。方法的具体含义及用法在后续任务中会详细讲解。类可以分为系统类和用户自定义类。系统类存放在Java类库中,用户自定义类是程序员自己定义的类。类将现实世界中的概念模拟到计算机程序中。类的特性包括封装性、继承性和多态性。上一页下一页返回任务3.1描述“人”信息程序设计

3.1.3创建对象1.创建对象的格式类是对象的模板,对象是类的实例,这是创建对象的依据。类也是一种数据类型,因此可以使用类创建该类的对象,而Java提供创建类的对象的关键词为new。语法格式为:例如:其中,“Cartruck;”为声明,“newCar();”为实例化,“=”表示赋值。上一页下一页返回任务3.1描述“人”信息程序设计

由以上可知,创建属于某种类的对象可以通过两个步骤来实现:(1)声明该类类型的一个变量,实际上该变量只是一个能够指向对象的引用。(2)利用new关键字创建对象,并赋值给第(1)步创建的变量,即在内存中分配一块区域存放创建的对象,并把该对象的引用指向内存空间。对象实例化的过程在内存中的存在形式如图3-3所示。2.对象的使用创建类的对象是为了能够使用类中已经定义好的成员变量和成员方法。通过使用运算符“.”,对象可以实现对自己变量的访问及对自己方法的调用。上一页下一页返回任务3.1描述“人”信息程序设计

对象访问格式如下:(1)变量访问:对象名.成员变量名;(2)方法访问:对象名.成员方法名([参数1,参数2,…]);例如:创建两个Car对象,对象名分别为truck和bus,然后对这两个对象的属性赋值。上一页下一页返回任务3.1描述“人”信息程序设计

truck和bus对象分别占用一块内存空间,有自己的属性值,因此truck、bus两个对象不会互相影响,即由一个类实例化的不同对象之间没有直接的关系,每个对象都有独立的存储空间,修改自己的属性不会影响其他对象,两者的内存分配如图3-4所示。上一页下一页返回任务3.1描述“人”信息程序设计

【任务实施】1.实施思路(1)打开Eclipse,创建Person类;(2)在类大括号内定义Person类的属性;(3)利用创建的Person对象,使用“对象名.属性名”形式进行赋值,并输出对象的各个属性值。上一页下一页返回任务3.1描述“人”信息程序设计

2.程序代码上一页下一页返回任务3.1描述“人”信息程序设计

上一页下一页返回任务3.1描述“人”信息程序设计

【任务拓展】上面的程序代码中,对类Person的测试是在类的内部main()方法中进行的。在大多数情况下,应该新建一个PersonTest测试类,对类Person进行测试。每个类单独为一个源代码文件。上一页下一页返回任务3.1描述“人”信息程序设计

【任务实训】1.实训目的(1)掌握类的定义;(2)掌握创建类的对象的方法;(3)掌握使用对象的方法。2.实训内容编写一个笔记本电脑类,其中属性包括品牌、型号,方法为显示电脑信息,并编写测试类进行对象的创建。上一页返回任务3.2借书卡程序设计

【知识目标】(1)掌握类的方法组成部分;(2)掌握定义和使用类的方法;(3)掌握变量作用域;(4)掌握定义包和导入包的关键字;(5)掌握使用构造方法实现对象成员的初始化的方法;(6)掌握方法重载;(7)掌握对构造方法进行重载的方法。【能力目标】(1)能够正确理解变量的作用域;(2)能够使用包组织Java工程;(3)能够运用构造方法完成对象实例化;(4)能够正确区分和使用方法重载。下一页返回任务3.2借书卡程序设计

【任务目标】(1)能够定义和使用类的方法;(2)理解构造方法的定义和意义;(3)理解方法重载的思想;(4)掌握方法重载的实现方法和特征;(5)能够分辨变量的作用域并正确使用变量。【任务陈述】借书卡是学生日常生活的重要组成部分。每张借书卡的信息包含账号、持卡人姓名、身份证号码、地址、已借书数、可借书数、本次借书数、本次还书数。使用借书卡还可以借书、还书和查询。要求:根据持卡人的不同操作,显示不同信息。当执行借书操作后,显示本次借书数及已借书数;当执行还书操作时,显示本次还书数和已借书数。任务3.2的运行结果如图3-5所示。上一页下一页返回任务3.2借书卡程序设计

【知识储备】3.2.1类的方法1.定义类的方法类的方法又称为成员方法或成员函数,用于描述类所具有的功能和操作,是一段完成某种功能或操作的代码。方法定义的格式如下:注释:(1)返回值类型:表示方法返回值的类型。如果方法不返回任何值,它必须声明为void(空)。对于有返回值的方法,方法中一定有return语句,方法的返回值类型和return语句后面的类型一样。例如,如果一个方法中含有代码“return"aaaa";”,那么包含该语句的方法的返回值是字符型。接收方法返回值的变量也必须与指定方法返回值的类型兼容。上一页下一页返回任务3.2借书卡程序设计

(2)方法名称:可以是任何合法标识符,但应具有意义,第一个字母小写。(2)参数列表:允许将参数值传递到方法中。列举的元素由逗号分开,而每一个元素包含一个类型和一个标识符,也称为形参。2.使用类的方法定义类的方法的目的是供对象调用,以实现其功能。方法使用的一般前提是创建对象以后,使用“.”操作符实现对其方法的调用,方法中的局部变量被分配内存空间,方法执行完毕,局部变量即刻释放内存。使用方法的格式如下:上一页下一页返回任务3.2借书卡程序设计

如果两个方法在同一个类中,可以直接使用该方法名进行调用。使用static修饰的静态方法的调用无须定义对象,可以通过类名直接使用。格式如下:1)无参方法的调用类的方法在使用时一般要先创建类的对象,再通过对象调用方法。例如,定义Person类的对象zhangsan:然后通过对象调用类的方法。例如调用学习方法:上一页下一页返回任务3.2借书卡程序设计

如果需要利用study()方法的返回值,可以将返回结果赋给同一类型的变量。例如:2)有参方法的调用有参方法同样在定义了类的对象后调用,并需要传入实际的参数,此时的参数称为实际参数,简称实参。实参必须与方法定义中的形参一致,所谓的一致是要求参数个数、参数类型、参数的排列顺序一致。例如,定义Person类的对象zhangsan,通过对象调用类的play()方法,play()方法中含有一个String类型的变量:同样,如果需要利用方法的返回值,可以将返回结果赋给同一类型变量。上一页下一页返回任务3.2借书卡程序设计

3)静态方法的调用静态方法的调用无须定义对象,可以通过类名直接使用,这种方法也称为类方法。定义格式:[public]static返回值方法名([参数列表]){…}调用格式:类名.方法名(实参1,实参2,…);例如,在类Person中定义一个静态方法eat():上一页下一页返回任务3.2借书卡程序设计

实例3-2:设计计算立方体体积的程序。代码如下:上一页下一页返回任务3.2借书卡程序设计

上一页下一页返回任务3.2借书卡程序设计

3.2.2构造方法1.构造方法的定义在创建类的对象时对类中的所有成员变量都初始化,赋值过程比较烦琐。如果在对象最初被创建时就完成对其成员变量的初始化,程序将更简洁。Java允许对象在创建时进行初始化,初始化的实现是通过构造方法来完成的。由前面任务3.1的知识可知,创建类的对象时,使用new关键字和一个与类名相同的方法来完成,这个方法是在实例化过程中被调用的,称为构造方法。构造方法区别于普通的方法,有几个明显的特点:(1)构造方法的名字必须与它所在的类的名字完全相同。(2)构造方法不返回任何数据类型,也不需要使用void关键字声明。(3)构造方法的作用是创建对象并初始化成员变量。上一页下一页返回任务3.2借书卡程序设计

(4)在创建对象时,系统会自动调用类的构造方法。(5)构造方法一般都用public来声明,这样才能在程序的任意位置创建对象。(6)每个类至少有一个构造方法。如果不写构造方法,Java将提供一个默认的不带参数的方法体作为空的构造方法。构造方法的定义格式如下:构造方法定义完毕之后即可通过创建对象对成员变量进行初始化操作。通常,需要结合实例化操作,使用传递实参的形式进行。上一页下一页返回任务3.2借书卡程序设计

2.构造方法的分类构造方法根据参数进行分类,分为无参构造方法和有参构造方法。1)无参构造方法例如:那么在含有main()方法的测试类中实例化People对象时:上一页下一页返回任务3.2借书卡程序设计

2)有参构造方法例如:那么在含有main()方法的测试类中实例化People对象时:从上面的实例化可以看出对成员变量进行了动态赋值。上一页下一页返回任务3.2借书卡程序设计

实例3-3:使用构造方法对Person类的两个成员变量进行初始化,并输出各个成员变量的值。上一页下一页返回任务3.2借书卡程序设计

程序运行结果如图3-6所示。上一页下一页返回任务3.2借书卡程序设计

3.2.3方法重载方法重载是指多个方法具有相同的名称,但是这些方法的参数必须不同。所谓的“不同”是指:参数的个数不同,参数类型不同,参数的顺序不同。返回类型不能用来区分重载的方法。在这种情况下,该方法即被重载,这个过程称为方法的重载。当一个重载方法被调用时方法名是一样的,因此Java用参数的类型、(或)数量、(或)顺序来选择实际调用的重载方法。例如,“System.out.println();”里面的println()方法就是重载方法。上一页下一页返回任务3.2借书卡程序设计

参数不同是区分重载方法的关键因素。参数不同主要包括以下几方面的不同:(1)参数类型不同。例如:(2)参数个数不同。例如:(3)参数顺序不同。例如:上一页下一页返回任务3.2借书卡程序设计

实例3-4:求圆形的面积,要求用户输入任何类型的数据后都能得到最终的面积值。代码如下:上一页下一页返回任务3.2借书卡程序设计

由实例3-4可知,方法重载的主要目的是满足在不同输入的情况下依然可以进行相同或相似的处理。这在编程上有些烦琐,但是使用性和灵活性得到了加强。由于其实现了Java在编译时的方法的多种状态,所以有时也称为静态多态。在Java中不仅普通方法可以重载,构造方法也可以重载。构造方法的重载是为了使初始化变量更为方便。只要构造方法的参数个数不同,或类型不同,便可定义多个名称相同的构造方法。上一页下一页返回任务3.2借书卡程序设计

实例3-5:利用构造方法重载实现不同变量初始化的过程。代码如下:上一页下一页返回任务3.2借书卡程序设计

上一页下一页返回任务3.2借书卡程序设计

在实例3-5中,Rectangle类有三个构造方法,当创建该类对象时根据指定的参数数量调用相应的构造方法。3.2.4变量的作用域变量声明的位置决定变量作用域。Java变量的范围有四个级别:类级、对象实(1)类级变量又称全局级变量,在对象产生之前就已经存在,就是static关键字修饰的变量。(2)对象实例级变量,就是成员变量,它可以在整个类和对象中使用。(3)方法级变量是在方法内部定义的变量,也就是局部变量。(4)块级变量是定义在一个块内部的变量,变量的生存周期就是该块,该程序块执行完成变量即从内存中删除,比如if、for语句的块。例级、方法级、块级。上一页下一页返回任务3.2借书卡程序设计

实例3-6:变量作用域演示程序设计。代码如下:上一页下一页返回任务3.2借书卡程序设计

程序运行结果如图3-7所示。若方法的局部变量与类的成员变量同名,则类的成员变量被隐藏,实例3-7说明了方法的局部变量z和类的成员变量z的作用域是不同的。上一页下一页返回任务3.2借书卡程序设计

实例3-7:同名变量作用域测试程序设计。代码如下:上一页下一页返回任务3.2借书卡程序设计

程序运行结果如图3-8所示。上一页下一页返回任务3.2借书卡程序设计

3.2.5定义包和导入包的关键字在Java中,为了便于管理多个类,将多个具有类似功能的类组成一个组,该组称为包(package)。包的出现解决了命名冲突、引用不方便、安全性等问题。程序员在协同编写程序时,很多时候不知道别人使用的类名,如果使用了相同的类名则会产生冲突,若使用包的机制,不同包中的两个文件同名时不会产生冲突,这类似于在不同文件夹下允许建立相同名称的文件。也就是说,包是Java提供的文件组织形式,采用类似于文件夹的形式。包提供了访问级别控制和命名空间管理。不同的包中允许出现相同名字的文件。上一页下一页返回任务3.2借书卡程序设计

1.定义包Java通过关键字package定义包。package语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。格式:package<顶层包名>[.子包名1][.子包名2]…[.子包名n];注释:(1)包名的命名规范由若干个标识符加“.”分隔而成。例如:(2)Sun公司建议使用公司域名倒写顺序定义包名,然后加入子包,如某公司的域名为ican.com,则包名为com.ican。例如,依照“地域范围+制作人+功能分类”来定义包:上一页下一页返回任务3.2借书卡程序设计

2.导入包为了能够使用与自身不在同一个包内的类的成员,需要在Java程序中使用import关键字导入该包。其格式如下:例如,导入系统类库中的Date表示日期的类:注意:在Java中,java.lang包不需要使用import手动导入,系统自动导入,因此在该内存中有很多常用的基础的类,例如Math。上一页下一页返回任务3.2借书卡程序设计

注释:(1)Java源文件中的import语句应位于package语句之后,且在类的定义之前。(2)“∗”操作符表示导入包中所有的类。(3)使用Eclipse等开发工具编程时,工具会自动提示需要导入的包。(4)导入的包可以是Java类库中的包或类,也可以是自定义的包或类。上一页下一页返回任务3.2借书卡程序设计

【任务实施】1.实施思路本任务中的行为包括借书、还书和查询。在BookCard类中分别定义了3个方法:borrow(int)、TheReturn(int)和query()。(1)打开Eclipse,创建BookCard类。(2)在类中定义类的属性。(3)在类中分别定义3个方法,表示借书、还书和查询。(4)在BookCard类的main()方法中创建一个BookCard类的对象。(5)利用创建的BookCard对象,用“对象名.方法”的形式调用方法,实现具体的功能。上一页下一页返回任务3.2借书卡程序设计

2.任务代码上一页下一页返回任务3.2借书卡程序设计

上一页下一页返回任务3.2借书卡程序设计

【任务拓展】一般的方法都需要有返回值,且调用方法后都需要使用返回值进行下一步操作。即使方法没有确定的返回值,也可以使用Boolean类型作为返回值,用于标识方法是否执行完毕。下面对任务进行拓展,使borrow(int)、TheReturn(int)方法都具有返回值,即改为正确借书、还书后,返回true,否则返回false。1.任务拓展要求原任务中方法borrow(int)、TheReturn(int)和query()都没有返回值,现在改为正确借书、还书后,返回true,否则返回false。上一页下一页返回任务3.2借书卡程序设计

2.任务拓展分析大部分方法都需要有返回值,对于有返回值的方法,一定要注意将方法的返回值与方法体内的return语句对应起来。例如,如果方法体内含有if.

.

.else语句,那么就应该注意返回值的问题:上一页下一页返回任务3.2借书卡程序设计

上一页下一页返回任务3.2借书卡程序设计

【任务实训】1.实训目的(1)掌握类的方法定义和使用;(2)掌握定义包和导入包;(3)掌握变量的作用域;(4)掌握注释的使用方法。2.实训内容编写一个程序,实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数的功能,同时假设每度电的价格为1.2元,实现计算并显示本月电费的功能。上一页返回任务3.3保护人的“隐私”程序设计

【知识目标】(1)掌握封装的概念;(2)掌握属性封装的步骤;(3)掌握访问权限的概念和使用。【能力目标】(1)能够使用封装的概念对程序进行封装操作;(2)能够使用private、public等关键字进行属性设置。【任务目标】(1)理解类封装的意义;(2)掌握类封装的实现步骤;(3)掌握各种访问修饰符的访问范围;(4)能够准确使用访问修饰符控制对象。上一页下一页返回任务3.3保护人的“隐私”程序设计

【任务陈述】在现实中,人的年龄和体重都不能小于0;如果忘记给名字赋值,人就会成为无名氏。要求使用封装完成对属性的控制,当年龄输出错误时提示出错。【知识储备】3.3.1封装1.封装的概念封装是Java面向对象思想的一种特性,也是一种信息隐蔽技术。封装有两层含义:一是指把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单位(即对象)中;另一层含义是指“信息隐蔽”,把不需要让外界知道的信息隐藏起来,或是有些对象的属性及行为允许外界使用,但不允许更改,而另一些属性或行为,则不允许外界知晓;或只允许使用对象的功能,而隐蔽对象功能实现的细节,对外界通过接口控制对象属性的读/写操作。上一页下一页返回任务3.3保护人的“隐私”程序设计

2.如何实现封装封装不是为了做一个完全不能对外开放的类,而是为了对类中的属性进行更好的控制,因此要实现封装需要属性私有化,这样可以保证属性不会被其他类改动,然后使用公有方法将私有的属性公开,在方法中对属性进行有效的读写控制,通常把这些方法称为访问器。封装的实现需要提供以下内容:(1)一个私有的属性(变量),使用private来声明私有变量。例如:privateStringname;(2)一个公有的读操作访问器,使用get()方法来完成。例如:publicStringgetName(){//方法体}上一页下一页返回任务3.3保护人的“隐私”程序设计

(3)一个公有的写操作访问器,使用set()方法来完成。例如:publicvoidsetName(Stringname){//方法体}实例3-8:使用封装技术模拟对学生借书的过程,要求学生最多只能借10本书。学生类中只有一个整数型变量count,为书的数量,对count设置时其值不能大于10,获得count值时不能获得一个负数。上一页下一页返回任务3.3保护人的“隐私”程序设计

代码如下:上一页下一页返回任务3.3保护人的“隐私”程序设计

程序运行结果如图3-9所示。上一页下一页返回任务3.3保护人的“隐私”程序设计

3.3.2Java的修饰符在定义类中的成员变量和成员方法时需要使用一些Java修饰符来作出某些限制。修饰符分为访问控制修饰符和非访问控制修饰符。访问控制修饰符用于限定类、属性或方法在程序中的访问和调用权限,包括public、private、protected等;非访问控制修饰符包括static、final、abstract、native、volatile、synchronized等。1.public修饰符public修饰符表示公有,可以修饰类、属性和方法。如果定义变量或方法时使用了public修饰符,则可以被包内其他类、对象以及包外的类、对象和方法使用。上一页下一页返回任务3.3保护人的“隐私”程序设计

2.private修饰符private修饰符只能修饰成员变量和成员方法。若使用private修饰符声明的变量和方法则只能由其所在的类本身使用,其他的类和对象无权使用该变量和方法。封装就是利用了这一特性使属性私有化。3.protected修饰符protected修饰符表示受保护,只能用来修饰成员变量和成员方法,不能修饰类。受保护的变量和方法的访问权限被限制在类本身、包内的所有类和其所在的类派生出的子类(可以在同一个包中,也可以在不同的包中)范围内。子类将在后续任务中详细介绍。上一页下一页返回任务3.3保护人的“隐私”程序设计

4.默认(friendly)修饰符如果一个类、方法或变量名前没有使用任何访问控制符,则该成员所拥有的是默认的访问控制符。默认的访问控制成员可以被其所在包中的其他类访问,故称为包访问特性。friendly并不是Java的关键字。Java修饰符的作用范围见表3-1。privatevoidpriMethod(),访问权限为私有权限,只能在VisitP中使用;protectedvoidproMethod(),访问权限为受保护,能被类本身和定义它的类的子类访问;publicvoidpubMethod(),访问权限为公有,可以被任何类使用;voidfriMethod(),访问权限为默认(友好),可以被与定义它的类在同一包中的所有类使用。上一页下一页返回任务3.3保护人的“隐私”程序设计

实例3-9:(访问权限实例):在一个类中声明4种不同的访问权限的方法,然后分别在包内和包外对4种方法进行访问。代码如下:上一页下一页返回任务3.3保护人的“隐私”程序设计

【任务实施】1.实施思路本任务中要使用包来进行Java程序中类的组织。把需要在一起工作的类放在同一个包里,除了public修饰的类能够被所有包中的类访问外,缺省修饰符所修饰的类只能被其所在包中的类访问,不能在其包外被访问。包这种组织方式把对类的访问封锁在一定的范围内,体现了Java面向对象的封装性。(1)打开Eclipse,创建一个包,在包内定义一个类。(2)在类的大括号内定义属性,在所有属性定义前都加private关键字。(3)在类的大括号内输入private属性的get()和set()方法的定义。(4)在类的大括号内定义相应的功能方法。(5)定义测试类,运行程序。上一页下一页返回任务3.3保护人的“隐私”程序设计

2.程序代码上一页下一页返回任务3.3保护人的“隐私”程序设计

上一页下一页返回任务3.3保护人的“隐私”程序设计

上一页下一页返回任务3.3保护人的“隐私”程序设计

运行结果如下:年龄出错,使用默认年龄18岁代替我是:zhangsan,今年:18岁还没有吃饭,饿了.

.

.体重:1.0吃饱了.

.

.,体重:1.0体重出错,使用默认100斤代替走累了.

.

.,体重:100.0走累了.

.

.,体重:98.0上一页下一页返回任务3.3保护人的“隐私”程序设计

上一页下一页返回任务3.3保护人的“隐私”程序设计

【任务实训】1.实训目的(1)掌握封装的思想和实现方法;(2)掌握构造方法的创建与使用方法;(3)掌握方法重载的使用方法。2.实训内容通过封装编写Book类。要求:类具有属性———书名、书号、主编、出版社、出版时间、页数、价格,其中,页数不能少于200页,否则输出错误信息,并强制赋默认值200;为各属性设置赋值和取值方法;编写方法detail(),用于在控制台输出每本书的信息。上一页返回任务3.4员工信息管理程序设计

【知识目标】(1)掌握继承的概念;(2)理解继承关键字的意义;(3)掌握父类与子类之间的关系,this、super关键字;(4)掌握多态的概念;(5)掌握最终类和抽象类的概念及用途。【能力目标】(1)能够分析对象间的继承关系并使用extends关键字实现;(2)能够使用this和super关键字进行相应操作;(3)能够运用多态概念编写程序。下一页返回任务3.4员工信息管理程序设计

【任务目标】(1)掌握继承的概念和实现方式;(2)掌握this和super关键字;(3)掌握继承关系下方法的覆盖;(4)理解多态的含义;(5)掌握最终类和抽象类的概念和实现方式。【任务陈述】公司中含有3类员工,分别是雇员、行政人员和经理。由于类别不同,对于3类员工分别使用类进行标示。要求雇员包含的属性为姓名和工号,行为为工作和加班。要求行政人员包含的属性为姓名、工号和职务,行为为工作和管理。要求经理包含的属性为姓名、工号、职务和部门,行为为工作和外交。使用继承技术实现公司员工的信息管理。任务3.4的运行结果如图3-10所示。上一页下一页返回任务3.4员工信息管理程序设计

【知识储备】3.4.1继承继承是面向对象程序设计思想中最重要的一个特征。通过继承可以有效地建立程序结构,明确类之间的关系,增强程序的可扩充性和可维护性,能够将已有的类扩充成关系更复杂、功能更强大的程序,并为面向对象思想的其他特性提供前提条件。1.继承的概念面向对象程序设计中,在已有类的基础上定义新类,而不需要把已有类的内容重新书写一遍,这就叫作继承。已有类称为基类或父类,在此基础上建立的新类称为派生类或子类。继承关系可以描述为:子类继承了父类或父类被子类继承。子类与父类建立继承关系后,子类也就拥有了父类的非私有的成员属性和成员方法,同时还可以拥有自己的属性和方法。上一页下一页返回任务3.4员工信息管理程序设计

2.继承的实现继承的英文为inherit,但是由继承定义可以看出子类实际上是扩展了父类,因此Java中继承是通过关键字extends来实现的。关键字extends说明要构建一个新类,而新类是从一个已经存在的类中衍生出来的。其格式如下:[修饰符]class子类名[extends父类]实例3-10:使用继承思想实现汽车类,以及公交车类和卡车类。其中,公交车和卡车都属于汽车类,因此,汽车可以作为父类,公交车和卡车作为子类继承汽车类。上一页下一页返回任务3.4员工信息管理程序设计

代码如下:上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

继承实现方式注释:(1)Java只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类。(2)如果子类继承了父类,则子类自动具有父类的全部非私有的数据成员(数据结构)和成员方法(功能)。(3)子类可以定义自己的数据成员和成员函数,同时也可以修改父类的数据成员或重写父类的方法。(4)Java允许多层继承。例如,子类A可以有父类B,父类B同样也可以再拥有父类C。因此,子类都是“相对”的。(5)在Java中,Object类为特殊超类或基类,所有的类都直接或间接地继承Object。上一页下一页返回任务3.4员工信息管理程序设计

经验:父类都是概念性的类别词汇,例如汽车、电灯、风扇,而汽车又可分为公交车、货车等;电灯又分为台灯、日光灯、彩灯等;风扇又可分为吊扇、台扇等。Java是面向对象程序设计语言,用来形容实际存在的实体对象,所以编程前对程序需求分析应从对象入手,总结多个对象之间的相同点和不同点,把相同点抽象出来组成一个概念性的父类,把不同点作为子类自己独有的性质。因此,通常情况下父类没有实例化的必要。上一页下一页返回任务3.4员工信息管理程序设计

3.4.2方法的覆盖当子类继承父类,而子类中方法与父类中方法的名称、返回类型及参数都完全一致时,就称子类中的方法覆盖了父类中的方法,有时也称为方法的“重写”。方法的重写相当于子类对父类某些功能的重新实现,因此在父类的方法中很多是空方法或是具有所有子类共性的功能。实例3-11:父类workman中有一个print()方法,使用一个子类Managerwork来继承workman并重写父类的print()方法。上一页下一页返回任务3.4员工信息管理程序设计

代码如下:上一页下一页返回任务3.4员工信息管理程序设计

该实例的子类继承了父类的print()方法,而子类也定义了一个print()方法,从继承的概念上讲,子类应该拥有两个print()方法,但实际上在使用子类对象调用方法时,运行的是子类的print()方法,即子类重写了父类的方法。3.4.3this和super关键字1.this关键字this关键字有3种用法:(1)this关键字代表它所在类的实例化对象。可以理解为是类对象的一个简单引用,利用this关键字可以调用当前对象的方法和变量,特别是当方法名和变量名很长时,这种调用更加有意义。(2)解决成员变量和局部变量重名的问题。(3)在同一个类中不同构造方法之间的调用需要使用this关键字。上一页下一页返回任务3.4员工信息管理程序设计

实例3-12:this关键字的三种用法举例。代码如下:上一页下一页返回任务3.4员工信息管理程序设计

2.super关键字super关键字的主要功能是实现子类的方法调用父类中的方法。super关键字有两种用法:(1)super关键字表示所在类的直接父类对象,使用super关键字可以调用父类的属性和方法。(2)在子类的构造方法中可以调用父类的构造方法。上一页下一页返回任务3.4员工信息管理程序设计

实例3-13:super关键字的两种用法举例。代码如下:上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

3.4.4多态1.多态的概念“多态”的字面意思是“多种状态”。通过对继承的介绍可知,父类可以被多个子类继承,那么在面向对象思想中“态”是指“子类和父类”两种状态,而一个父类可以拥有多个子类,那么子类和父类加起来就可以称为“多态”。例如:父类记作A,有子类a1和a2,则“Aa=newa1();”和“Aa=newa2();”这两个语句是对的,同时可以定义“Aa=newA()”,因此,可以看出对于父类A的声明可以具备三个对象(状态),这种现象即多态。上一页下一页返回任务3.4员工信息管理程序设计

在正式讲解多态的概念前,必须重新强调前面介绍的“重写”概念。方法重写是指父类中的方法在被子类继承后,子类可重新实现方法体的内容,这样子类和父类中就存在了一个名字相同,但实现不同的方法。假设上个例子中父类A中有public权限方法method(),同时子类a1和a2对该方法进行重写。三个语句所产生的对象a分别调用method()方法。第一句是调用子类a1中的method()方法,第二句则是调用子类a2中的method()方法,第三句则是调用父类A的method()方法。在面向对象的程序设计中,需要利用这样的“重名”现象来提高程序的抽象度和简洁性。多态的定义为:多态是指Java的运行呈多态性,它是面向对象程序设计中代码重用的最强大机制,Java实现多态的基础是动态方法调度,就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为。上一页下一页返回任务3.4员工信息管理程序设计

2.多态的用法多态的用法一般可以归结为两种:一种用法是使用父类声明的数组存储子类的对象,例如,父类A,子类B、C、D都继承父类:A[]a=newA[];a[0]=newB();a[1]=newC();a[2]=newD();另一种用法是以父类声明作为方法形参,以子类对象作为实参传入,例如,上面的A、B、C、D的继承关系依然成立,普通类L中有个方法定义如下:publicvoidmothed(Aa){…}上一页下一页返回任务3.4员工信息管理程序设计

在主类中有一个L的对象l,那么实例3-14:在员工管理系统中,员工分为普通员工(CommEmp)、管理人员(Manag⁃er)和人力资源(HR)。要求HR对所有员工进行评测,即打印员工的信息。父类Employee由普通员工和管理员工总结抽象出来。上一页下一页返回任务3.4员工信息管理程序设计

代码如下:上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回程序运行结果如图3-11所示。任务3.4员工信息管理程序设计

3.4.5最终类和抽象类1.最终类Java中final关键字可用来修饰类、方法和局部变量。final关键字修饰的类称为最终类,此类不能被继承。final关键字修饰的方法叫作最终方法,此方法不能被子类重写。final关键字修饰的变量实际上相当于常量,此变量(成员变量或局部变量)只能赋值一次。实例3-15:最终类错误示例程序设计。上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

2.抽象类Java中有些方法只声明返回的数据类型、方法名称和所需参数,没有方法体,并使用abstract关键字修饰,这样的方法称为抽象方法,抽象方法只需要声明而不需实现。例如:publicabstractintadd(intop1,intop2);在面向对象思想中,对象都是通过类来创建的,但并不是所有的类都能用来创建对象,如果类中没有包含足够的“信息”描绘具体的对象,这样的类就是抽象类。而其中“信息”在类中特指成员方法,没有足够的“信息”则表示某些方法没有被实现,也就是说抽象类中含有抽象方法。抽象类可以包含多个抽象方法,也可以不包含任何抽象方法。一般情况下抽象类都被用作父类,其子类则通过重写父类中的抽象方法创建具体的对象。抽象类是创建一个体现某些基本行为的类,该类可以声明抽象方法,抽象方法没有方法体,只能通过继承在子类中实现该方法。上一页下一页返回任务3.4员工信息管理程序设计

抽象类的应用应注意如下问题:(1)抽象类和抽象方法都必须用abstract关键字来修饰;(2)抽象类不能被实例化,也就是不能用new关键字去产生对象;(3)抽象方法只需声明,而不需实现;(4)含有抽象方法的类必须被声明为抽象类,抽象类的子类必须重写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。上一页下一页返回任务3.4员工信息管理程序设计

实例3-16:抽象类程序设计,要求使用抽象类Person作为父类,设计Sondent子类实现Person类及其方法。代码如下:上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

程序运行结果如图3-12所示。【任务实施】1.实施思路员工是一般性的概念,在定义类时,将经理类、行政类中相同的属性和方法抽象出来,集中放在员工父类中,形成一种共享的机制,经理类、行政类中只放自己的特有成员变量和成员方法,减少重复代码。这样的员工类称为父类,行政人员类、经理类称为子类。子类继承父类的非私有成员变量和成员方法。(1)打开Eclipse,在包中定义员工类。(2)在员工类中只定义共有的成员变量、构造方法,定义共有的方法。(3)定义行政人员类、经理类,只定义自己的特有属性和方法,父类已有的成员变量和成员方法不再定义。(4)编写测试类,分别声明对象进行调用。上一页下一页返回任务3.4员工信息管理程序设计

2.程序代码上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

上一页下一页返回任务3.4员工信息管理程序设计

【任务拓展】下面对Object类进行讲解:任何类的父类都是Object,根据多态的概念,任何子类的对象都可以赋值给父类的引用。也就是说任何类的所有示例都可以用Object来代替。例如:Objectobj="String";由于整型、字符型等基本数据类型不属于对象类型(引用类型),所以不能使用Object指向这些基本数据类型,但通过基本数据类型的对象包装器进行转换后也可以使用Object指向基本数据。例如:Objectobj=newInteger(1);Object可以代表所有对象,这种思想对于通用编程是非常有用的。例如在Arrays类中有个静态方法sort(Object[]obj),在该方法中只要传入任何一种数据类型数组即可执行。这种通用性可以增加方法的可用范围,使该方法具备了通用性。上一页下一页返回任务3.4员工信息管理程序设计

【任务实训】1.实训目的(1)掌握继承的概念和实现;(2)掌握多态的概念和实现。2.实训内容编写描述动物世界的继承关系程序。例如,动物(Animal)包括山羊(Goat)和狼(Wolf),山羊与狼吃(eat)的行为不同,山羊吃草,狼吃肉,但其走路(walk)的行为一致。通过继承实现以上需求,并编写AnimalTest测试类进行测试。上一页返回任务3.5模拟USB接口程序设计

【知识目标】(1)掌握Java接口的概念;(2)理解面向接口编程的思想;(3)掌握面向接口编程的步骤;(4)掌握接口中常量的使用方法。【能力目标】(1)能够使用接口技术完成程序结构的设计;(2)运用多态技术实现接口的程序架构设计。【任务目标】(1)掌握Java接口的概念;(2)理解面向接口编程的思想;(3)掌握接口的多态技术。下一页返回任务3.5模拟USB接口程序设计

【任务陈述】电脑主板上的USB接口有严格的规范,U盘、移动硬盘的内部结构不同,每种盘的容量也不同,但U盘、移动硬盘都遵守USB接口的规范,实现了开始、使用和停止三个方法。所以,在使用USB接口时,可以将U盘、移动硬盘插入任意一个USB接口,而不用担心USB接口与盘的对应问题。编写程序,模拟移动设备、鼠标和键盘使用USB接口,并分别实现USB接口要求的开始(start)、使用(conn)和停止(stop)功能。任务3.5的运行结果如图3-13所示。上一页下一页返回任务3.5模拟USB接口程序设计

【知识储备】3.5.1Java接口购买USB鼠标的时候,不需要问商家USB鼠标接口的型号,一般情况下都可以直接使用。其原因就是USB接口是统一的,都实现了鼠标的基本功能。所有厂家都会按照一个规范来制造。这个规范说明制作该USB类型的鼠标应该做些什么,但并不说明如何做。同样,电脑主板上的PCI插槽的规范也类似于鼠标。1.接口的概念Java程序设计中的接口(interface)也是一种规范,用来组织应用程序中的类,并调节它们的相互关系。接口是由常量和抽象方法组成的特殊类,是对抽象类的进一步抽象,形成了一个属性和行为的介绍集合,该集合通常代表一组功能的实现。上一页下一页返回任务3.5模拟USB接口程序设计

提示:在最早期的面向对象语言中不是使用interface关键字,而是使用protocal关键字。从这个词汇中可以看出接口最核心的意义是协议,即其为一个规定了一组功能的协议。既然接口有协议的意思,那么协议中将说明需要遵守的条约,相当于抽象方法。然而协议中一般不规定实现条约的方式,这进一步说明了使用抽象方法的意义。Java的单继承性使Java简单,易于管理程序。为了能够实现多继承,Java使用了接口,一个类可以实现多个接口。上一页下一页返回任务3.5模拟USB接口程序设计

2.接口的声明接口的声明的语法格式如下:由接口的声明的语法格式可以看出,接口是由常量和抽象方法组成的特殊类。注释:(1)接口的访问修饰符只有public;(2)接口可以实现多继承,一个接口可以继承多个父接口中的方法和常量;(3)接口体只包含两部分,一是常量,二是抽象方法;上一页下一页返回任务3.5模拟USB接口程序设计

(4)接口中的常量必须赋值,并且接口中的属性都被默认为是由final关键字来修饰的常量;(5)接口中的所有方法都必须是抽象方法,抽象方法不需要使用abstract关键字声明,Java直接默认为是抽象方法3.接口的实现和使用接口里只有抽象方法,它只要声明,而不用定义处理方式,没有办法直接实例化出对象。利用接口打造新的类的过程,称为接口的实现(implementation),同时实现了接口的类,称为接口实现类。上一页下一页返回任务3.5模拟USB接口程序设计

接口实现使用关键字implements,格式如下:实例3-17:接口实现程序设计。代码如下:上一页下一页返回任务3.5模拟USB接口程序设计

接口的使用与类的使用不同。类可以直接使用new关键字来构建一个类的实例进行应用,而接口只能被它的实现类进一步实现才能发挥作用。上一页下一页返回任务3.5模拟USB接口程序设计

3.5.2接口与多态多态是面向对象编程思想的重要体现,是建立在继承关系的基础上的。接口与它的实现类之间存在实现关系,同时也就具有继承关系。因此接口可以像父类、子类一样使用多态技术,其中接口回调就是多态技术的体现。接口回调是指:可以将接口实现类的对象赋给该接口声明的接口变量,那么该接口变量就可以调用接口实现类对象中的方法。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论