第4章类和对象

上传人:ni****g 文档编号:571178639 上传时间:2024-08-09 格式:PPT 页数:63 大小:364KB
返回 下载 相关 举报
第4章类和对象_第1页
第1页 / 共63页
第4章类和对象_第2页
第2页 / 共63页
第4章类和对象_第3页
第3页 / 共63页
第4章类和对象_第4页
第4页 / 共63页
第4章类和对象_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《第4章类和对象》由会员分享,可在线阅读,更多相关《第4章类和对象(63页珍藏版)》请在金锄头文库上搜索。

1、第4章类和对象Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望第4章类和对象v4.1.面向对象的基本概念面向对象的基本概念v4.2类类v4.3方法方法v4.4访问控制符访问控制符v4.5静态修饰符、静态字段和方法静态修饰符、静态字段和方法v4.6抽象类与抽象方法抽象类与抽象方法v4.7最终类、最终属性、最终方法与终结器最终类、最终属性、最终方法与终结器v本章小结本章小结v思考与练习思考与练习4.1.面向对象的基本概念学习要点之二学习要点之二OOD方法提供了抽象数据类型机制,遵循软件设

2、计的三条重要原则,即抽象、信息隐藏和模块化;双重模块化数据对数据的操作信息处理+封装4.1.面向对象的基本概念v4.1.1抽象v1什么是抽象抽象就是抽出事物的本质特性而暂时不考虑它们的细节。过程抽象和数据抽象是常用的两种主要抽象手段。 v2如何用面向对象的方法实现抽象如何用面向对象的方法实现抽象一个抽象数据类型(AbstractDataType,ADT)可以分解成4个部分,如图4-2所示。语法和语义构成抽象数据类型ADT的说明,让使用者了解这个抽象数据类型的特征。属性和方法构成ADT的实现,展示这个ADT是怎样做成的。图4-2抽象数据类型 v4.1.2封装封装 将信息隐蔽的过程称为封装。 有两

3、方面的原因促使我们控制对成员的访问。 第一个原因是防止程序员接触他们不该接触的东西通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,毋需明白这些信息。 第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。 v4.1.3对象对象 可将对象想象对象(可将对象想象对象(objectobject)应是应是实际问题域中有意义的个体或概念实体。实际问题域中有意义的个体或概念实体。此外,对象应该具有记忆自身状态的能此外,对象应该具有记忆自身状态的能力。同时对象应该以某种方式与系统发力。同时对象应该以某种方式与系统发生关联,既对象应该与系统中其他有意生关联

4、,既对象应该与系统中其他有意义的对象进行消息传递,并提供外部服义的对象进行消息传递,并提供外部服务。务。 v4.1.3对象对象l(1) (1) 所有东西都是对象。可将对象想象成一种新型变所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。量;它保存着数据,但可要求它对自身进行操作。 l(2) (2) 程序是一大堆对象的组合;通过消息传递,各对程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。象知道自己该做些什么。 l(3) (3) 每个对象都有自己的存储空间,可容纳其他对象。每个对象都有自己的存储空间,可容纳其他对象。l(4) (4) 每个对象都

5、有一种类型。根据语法,每个对象都每个对象都有一种类型。根据语法,每个对象都是某个是某个“类类”的一个的一个“实例实例”。其中,。其中,“类类”(ClassClass)是是“类型类型”(TypeType)的同义词。一个类最重要的特征就的同义词。一个类最重要的特征就是是“能将什么消息发给它?能将什么消息发给它?”l(5 5)同一类所有对象都能接收相同的消息。)同一类所有对象都能接收相同的消息。 4.2 类 类类是是现现实实世世界界某某些些对对象象的的共共同同特特征征(属属性性和和操操作作)的的表示,对象是类的实例表示,对象是类的实例。4.2 类 类的基本定义方法如下:修饰符修饰符class类名类名

6、extends父类父类implements接口名接口名 类成员变量声明类成员变量声明 类方法声明类方法声明类的修饰符用来说明类的特殊性质。分为三种:访问控制符:public公共类公共类抽象类说明符:abstract最终类说明符:final接口名跟在implements关键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。接口是Java语言用来实现多重继承的一种特殊机制,我们将在后面详细介绍它的使用方法。v1关于类头关于类头-classclass关键字,在它的后面,应跟随新数据类型的名称。(注意不要把class写成Class)。父类名跟在extends关键字后面,用来说明当前类是哪个已经存

7、在类的子类,存在继承关系。继承是类与类之间的一种非常重要的关系。v1关于类头关于类头-类的修饰符类的修饰符“public”(公共)公共)意味着后续的定义任何人均可使用。“private”(私有)私有)意味着除您自己、类型的创建者以及那个类型的内部函数成员,其他任何人都不能访问后续的定义信息。“protected”(受保护的)受保护的)与“private”相似,只是一个继承的类可访问受保护的成员,但不能访问私有成员。“friendly”(友好的)友好的)若某样东西是“友好的”,意味着它只能在这个包装的范围内使用(所以这一访问级别有时也叫作“包装访问”)。“v1关于类头关于类头-接口名接口名接口名

8、跟在接口名跟在implements关键字后面,用来关键字后面,用来说明当前类中实现了哪个接口定义的功能说明当前类中实现了哪个接口定义的功能和方法。接口是和方法。接口是Java语言用来实现多重继语言用来实现多重继承的一种特殊机制,我们将在后面详细介承的一种特殊机制,我们将在后面详细介绍它的使用方法。绍它的使用方法。2关于类体关于类体类类体体的的定定义义要要包包括括类类的的具具体体内内容容,包包括括类的属性与方法。类的属性与方法。classJava中声明类属性为简单变量的语法如下:中声明类属性为简单变量的语法如下:修饰符修饰符变量类型变量类型变量名变量名=变量初值变量初值;变量类型和变量名是声明一

9、个变量必变量类型和变量名是声明一个变量必不可少的部分;变量的类型是简单数据类型,不可少的部分;变量的类型是简单数据类型,如如int、double等。等。2关于类体关于类体-类的属性类的属性2关于类体关于类体-类的方法类的方法Java中声明方法的语法如下:中声明方法的语法如下:修饰符修饰符返回值类型返回值类型方法名方法名(参数参数列表列表)throws例外名例外名1,例外名,例外名2,方法体:方法体:局部变量声明;局部变量声明;语句序列;语句序列;类的方法,又称类的方法,又称为成员函数,用为成员函数,用来规定类属性上来规定类属性上的操作,实现类的操作,实现类的内部功能的机的内部功能的机制,同时也

10、是类制,同时也是类与外界进行交互与外界进行交互的重要窗口。的重要窗口。类中定义的方法通常起到两种作用:一是围绕着类的类中定义的方法通常起到两种作用:一是围绕着类的属性进行各种操作;二是与其他的类或对象进行数据交流、属性进行各种操作;二是与其他的类或对象进行数据交流、消息传递等操作。消息传递等操作。注意:系统调用方法的最大特点:注意:系统调用方法的最大特点:不需要在程序里书写专门的调用不需要在程序里书写专门的调用方法的命令方法的命令Java语言中定义的方法有两类:语言中定义的方法有两类:一类是需要程序书写专门的调用命令来调用的方法,一类是需要程序书写专门的调用命令来调用的方法,称为程序调用方法,

11、例如称为程序调用方法,例如isPfime();另一类是运行过程中系统自动调用的方法,称为系统方另一类是运行过程中系统自动调用的方法,称为系统方法,例如我们前面程序中的法,例如我们前面程序中的action()、paint()、init()等。这等。这两类方法的定义和使用原则有很大差异。两类方法的定义和使用原则有很大差异。2关于类体关于类体-类的方法类的方法4.2.2用户程序自定义类用户程序自定义类Java程序员把注意力放在创建称为类的用户程序员把注意力放在创建称为类的用户自定义类型(自定义类型(user-definedtype)上,类也称上,类也称为程序员定义的类型(为程序员定义的类型(prog

12、rammer-definedtype),),每个类都含有数据和一组操作数据的每个类都含有数据和一组操作数据的方法,类中的数据部分称为实例变量。用户定方法,类中的数据部分称为实例变量。用户定义类型(即类)的实例称为对象。义类型(即类)的实例称为对象。 下面是一个简单化的下面是一个简单化的EmployeeEmployee类,在编写今后的职工工资类,在编写今后的职工工资系统时,会用到它。系统时,会用到它。classEmployee/构造函数构造函数publicEmployee(Stringn,doubles,intyear,intmonth,intday)name=n;/职工姓名职工姓名salary

13、=s;/职工工资职工工资hireDay=newGregorianCalendar(year,month-1,day);/出勤数出勤数/方法方法1publicStringgetName()returnname;/更多的方法更多的方法/属性的实例属性的实例privateStringname;privatedoublesalary;privateDatehireDay;4.2.3创建类及类的实例对象创建类及类的实例对象 对对象象是是类类的的一一个个实实例例,类类是是同同种种对对象象的的抽抽象象,是是创创建建对对象象的的模模板板。在在程程序序中中创创建建个个对对象象将将在在内内存中开辟一块空间,其中包

14、括该对象的属性和方法。存中开辟一块空间,其中包括该对象的属性和方法。 我我们们将将分分步步讲讲述述这这个个类类的的实实现现细细节节。创创建建对对象象使使用用关关键键字字运运算算符符newnew,例例如如下下面面的的语语句句将将创创建建EmployeeEmployee的对象:的对象:【例【例4.14.1】显示三个员工的相关信息】显示三个员工的相关信息4.2.3创建类及类的实例对象创建类及类的实例对象在在程程序序中中我我们们构构造造了了一一个个EmployeeEmployee数数组组,并并给给它它赋赋给给三三个个EmployeeEmployee对对象象。关于数组我们将在下一章讲述。关于数组我们将在

15、下一章讲述。 staff0 = staff0 = newnew Employee( Employee(张三张三, 75000,1987, 12, 15);, 75000,1987, 12, 15); staff1 =staff1 = new new Employee(Employee(李四李四, 50000,1989, 10, 1);, 50000,1989, 10, 1); staff2 = staff2 = newnew Employee( Employee(王五王五, 40000,1990, 3, 15);, 40000,1990, 3, 15); 创建对象以某个类为模板,这个类里定义了

16、哪创建对象以某个类为模板,这个类里定义了哪些属性和方法,新建的对象就必然在内存里拥有些属性和方法,新建的对象就必然在内存里拥有相应的属性和方法。相应的属性和方法。 可见,相对于简单数据类型,类就是用户自己可见,相对于简单数据类型,类就是用户自己定义的复杂的抽象数据类型:而相对于简单变量,定义的复杂的抽象数据类型:而相对于简单变量,对象就是复杂的既包括数据又包括方法代码的复对象就是复杂的既包括数据又包括方法代码的复杂数据单位。杂数据单位。4.2.4构造函数构造函数v1构造函数的一般概念构造函数的一般概念v2创建自己的构造函数创建自己的构造函数v3构造函数的作用构造函数的作用4.2.4构造函数构造

17、函数-构造函数的一般概念构造函数的一般概念 要要使使用用对对象象,首首先先必必须须构构造造它它们们,并并指指定定它它们们的的初初始始状状态态,然后将方法应用于对象。然后将方法应用于对象。 在在Java程程序序设设计计语语言言中中,使使用用构构造造函函数数(constructor)来来构构造造新新的的实实例例。一一个个构构造造函函数数是是一一个个新新的的方方法法,它它的的作作用用是是构构造造并初始化对象。并初始化对象。构构造造函函数数是是类类的的一一种种特特殊殊方方法法,它它的的特特殊殊性性主主要要体体现现在在如如下下的的几个方面:几个方面:(1)构造函数的方法名与类名相同。)构造函数的方法名与

18、类名相同。(2)构造函数没有返回类型。)构造函数没有返回类型。(3)构造函数的主要作用是完成对类对象的初始化工作。)构造函数的主要作用是完成对类对象的初始化工作。(4)构造函数不能由编程人员显式地直接调用。)构造函数不能由编程人员显式地直接调用。(5)在在创创建建一一个个类类的的新新对对象象的的同同时时,系系统统会会自自动动调调用用该该类类的的构造函数为新对象初始化。构造函数为新对象初始化。4.2.4构造函数构造函数-创建自己的构造函数创建自己的构造函数 构构造造函函数数的的名名字字和和类类的的名名字字是是相相同同的的。当当构构造造Employee类类的的对对象象时时,此此构构造造函函数数被被

19、启启动动,实实例例字字段段赋赋初初值值,在在Java中,定义和初始化是统一的中,定义和初始化是统一的两者缺一不可。两者缺一不可。 例如,用下面的代码创建例如,用下面的代码创建Employee类的一个实例时,类的一个实例时,newEmployee(“JamesBond”,100000,1950,1,1);构造函数的特点有:构造函数的特点有:(1 1)构造函数和类具有相同的名字。)构造函数和类具有相同的名字。(2 2)一个类可以有多个构造函数。)一个类可以有多个构造函数。(3 3)构造函数可以有)构造函数可以有0 0个、个、1 1个或多个参数。个或多个参数。(4 4)构造函数没有返回值。)构造函数

20、没有返回值。(5 5)构造函数总是和)构造函数总是和newnew运算符一起被调用。运算符一起被调用。4.2.4构造函数构造函数-构造函数的作用构造函数的作用(1)对象初始化)对象初始化(2 2)引入更多的灵活度(变量赋值或更复杂的操作)引入更多的灵活度(变量赋值或更复杂的操作)(3)Java中可以不定义构造函数中可以不定义构造函数Java中中可可以以不不定定义义构构造造函函数数,此此时时系系统统会会自自动动为为 该该系系统统生生成成一一个个默默认认的的构构造造函函数数。这这个个构构造造函函数数的的名名字字与与类类名相同,它没有任何形式参数,也不完成任何操作。名相同,它没有任何形式参数,也不完成

21、任何操作。 为为了了避避免免失失去去控控制制,一一般般将将构构造造函函数数的的声声明明与与创创建建分分开开处理。处理。 4.3.1方法概述方法概述4.3 方法Java程程序序是是由由一一个个个个类类定定义义组组成成的的,类类有有两两个个部部分分:属属性性和和方方法法。属属性性描描述述类类是是什什么么,方方法法描描述述类类做做什什么么。任任何何对对象象都都有有独独立立的的内内存存存存储储它它的的属属性性。类类的的所所有有的的对对象象共共享存贮在内存的方法。享存贮在内存的方法。 换言之:方法是类的主要组成部分。在一个类中,程换言之:方法是类的主要组成部分。在一个类中,程序的作用体现在方法中。序的作

22、用体现在方法中。 方法即是方法即是JAVA创建一个有名字的子程序。一个主方法创建一个有名字的子程序。一个主方法和若干个子方法构成。主方法调用其他方法,其他方法间和若干个子方法构成。主方法调用其他方法,其他方法间也可互相调用,同一个方法可被一个或多个方法调用任意也可互相调用,同一个方法可被一个或多个方法调用任意次。次。 4.3.1方法概述方法概述Java程序的基本结构如下:程序的基本结构如下:引入引入Java类库;类库;定义用户类定义用户类1定义类定义类1的若干变量或对象:的若干变量或对象: 定义类定义类1的方法的方法1; 定义类定义类1的方法的方法2;定义类定义类1的方法的方法M1;定义用户类

23、定义用户类2定义类定义类2的若干变量或对象:的若干变量或对象:定义类定义类2的方法的方法1;定义类定义类2的方法的方法2;定义类定义类2的方法的方法M24.3.1方法概述方法概述Java语语言言的的方方法法实实现现子子任任务务处处理理时时,有有下下面面几几个原则与规律:个原则与规律:(1)算算法法中中需需要要细细化化的的步步骤骤、程程序序中中重重复复的的代代码码以及重载父类方法都可以定义成类的方法。以及重载父类方法都可以定义成类的方法。(2)界面清晰。)界面清晰。(3)大小适中。)大小适中。(4)方方法法有有两两种种:一一种种是是标标准准方方法法,JavaAPI提提供供了了丰丰富富的的类类和和

24、方方法法,这这些些方方法法提提供供了了程程序序员员所所需需的的许许多多功功能能。另另一一种种是是用用户户自自定定义义的的方方法法,以以解解决决用户专门需要。用户专门需要。(5)Java应应用用程程序序中中,程程序序的的执执行行从从main类类开开始始,调调用用其其他他方方法法后后又又回回到到main类类,在在main类类中中结结束束整整个程序的运行。个程序的运行。4.3.2定义方法定义方法v1声明方法头声明方法头v2声明方法体声明方法体Java中声明方法的语法如下:中声明方法的语法如下:修饰符修饰符返回值类型返回值类型方法名方法名(参数参数列表列表)throws例外名例外名1,例外名,例外名2

25、,方法体:方法体:局部变量声明;局部变量声明;语句序列;语句序列;类的方法,又称类的方法,又称为成员函数,用为成员函数,用来规定类属性上来规定类属性上的操作,实现类的操作,实现类的内部功能的机的内部功能的机制,同时也是类制,同时也是类与外界进行交互与外界进行交互的重要窗口。的重要窗口。4.3.2定义方法定义方法-声明方法头声明方法头1声明方法头声明方法头方方法法头头一一般般由由方方法法名名、参参数数列列表表、返返回回类类型型、方法修饰符和方法抛出的例外五部分组成。方法修饰符和方法抛出的例外五部分组成。(1)方法名可以是任何有效的标识符,命名规则与标识符命名规则相同。(2)类型说明符用来指定方法

26、返回值的类型,方法最多只能返回一个值。(3)参数列表是方法的输入接口,它列出了一系列形式参数的类型和名称,在方法参数表的右括号后加一个分号是语法错误。参数表以逗号为分隔符,其中包含了方法被调用时传递给方法的参数说明。对于方法定义中的每一个参数,方法调用时必须有一个参量与之对应,而且该参量的类型必须与对应参数类型相一致。4.3.2定义方法定义方法-声明方法体声明方法体方法头定义了方法的性质,方法体则定义了方法的具体内容。方法头定义了方法的性质,方法体则定义了方法的具体内容。方方法法体体通通常常起起到到两两种种作作用用,一一是是围围绕绕类类的的属属性性进进行行各各种种操操作作;二是与其他的类与对象

27、进行数据交流、消息传递等操作。二是与其他的类与对象进行数据交流、消息传递等操作。在一个方法中定义另一个方法将产生语法错误。在一个方法中定义另一个方法将产生语法错误。(1)最最好好避避免免局局部部变变量量“屏屏蔽蔽”实实例例变变量量,在在一一个个类类中中不不使使用用同同名名标标识识符符就就可可以以做做到到这这一一点点;方方法法调调用用中中参参数数用用来来传传递递数数值、传递引用,同时方法还可以嵌套、递归调用。值、传递引用,同时方法还可以嵌套、递归调用。(2)方方法法体体中中如如果果指指定定了了非非void的的返返回回值值类类型型,方方法法中中就就必必须须包包含含一一条条return语语句句保保证

28、证任任何何情情况况下下都都有有返返回回数数值值,return语句后面不能跟任何表达式;语句后面不能跟任何表达式;4.3.2定义方法定义方法-声明方法体声明方法体例如下面的语句为部门类例如下面的语句为部门类Department定义了若干方法:定义了若干方法:ClassDepartmentintm_DeptNo;部门编号部门编号Stringm_DeptName;部门名称部门名称intm_DeptTotalEmp;部门雇员数部门雇员数ManagerEmployeem_DeptMgr;部门主管部门主管intgetDeptNo()获取当前对象的部门号获取当前对象的部门号return_DeptNo;返回这

29、个对象的部门号返回这个对象的部门号v4.3.3方法的调用方法的调用v1系统调用方法系统调用方法v2程序调用方法程序调用方法Java语言中调用方法有两类:语言中调用方法有两类:一类是需要程序书写专门的调用命令来调用的方法,一类是需要程序书写专门的调用命令来调用的方法,称为程序调用方法,例如称为程序调用方法,例如isPfime();另一类是运行过程中系统自动调用的方法,称为系统方另一类是运行过程中系统自动调用的方法,称为系统方法,例如我们前面程序中的法,例如我们前面程序中的action()、paint()、init()等。这等。这两类方法的定义和使用原则有很大差异。两类方法的定义和使用原则有很大差

30、异。注意:系统调用方法的最大特点:不需要在程序里书写专门的调用方法的命令v4.3.3方法的调用方法的调用在类中调用类自身的方法,可以直接使用这个方法的在类中调用类自身的方法,可以直接使用这个方法的名称;调用其他对象或类的方法,则需要使用该对象或类名称;调用其他对象或类的方法,则需要使用该对象或类为前缀。例如在为前缀。例如在isSameDept()方法中,语句方法中,语句if(getDeptNo()dgetDeptNo()中通过中通过getDeptNo()调用当前对象自身的方法并获得当前对调用当前对象自身的方法并获得当前对象的部门号,通过象的部门号,通过dgetDeptNo()调用形式参数调用形

31、式参数d的方法获的方法获得得d的部门编号。这里的形式参数的部门编号。这里的形式参数d也是一个也是一个Depamnent类类的对象。的对象。v4.3.3方法的调用方法的调用(实例实例)booleansetDeptNo(intNewNo)/把当前部门号重新设置称参数值把当前部门号重新设置称参数值if(NewNo0)/若给出的新部门号合法若给出的新部门号合法m_DeptNo=NewNo;/修改类属性修改类属性m_DeptNoreturntrue;/返回返回true,声明部门编号修改成功声明部门编号修改成功elsereturnfalse;/若形式参数给出新部门号非法,返回若形式参数给出新部门号非法,返

32、回false4.3.4JavaAPI中的方法中的方法1Math类的方法类的方法2Math方法的调用实例方法的调用实例在Java中,JavaAPI(ApplicationProgramInterface,也称为Java类库)提供了丰富的类和方法,可以执行常见的算术运算、字符串操作、字符操作、输入输出、错误检查等操作。4.3.4JavaAPI中的方法中的方法-Math类的方法类的方法v表4-1Math类常用的方法方法方法说明说明方法方法说明说明abs(x)x的绝对值的绝对值(这个方法还有这个方法还有float,int和和long型值的版本型值的版本)max(x,y)取取x和和y中较大者。中较大者。

33、ceil(x)不小于不小于x的最小整数的最小整数(向上取整向上取整)min(x,y)取取x和和y中较小者。中较小者。cos(x)x的余弦函数值的余弦函数值(x以弧度为单以弧度为单位位)pow(x,y)x的的y次幂次幂exp(x)指数方法指数方法e的的x次幂次幂sin(x)x的正弦函数值的正弦函数值(x以弧度为单位以弧度为单位)floor(x)不大于不大于x的最大整数的最大整数(向下取整向下取整)sqrt(x)x的平方根的平方根log(x)x的自然对数的自然对数(以以e为底为底)4.3.4JavaAPI中的方法中的方法-Math方法的调用实例方法的调用实例v表4-1Math类常用的方法 调调用用

34、方方法法的的一一般般格格式式是是先先写写方方法法名名,然然后后是是左左括括号号,接接着着是是参参数数(argument)或或由由逗逗号号分分隔隔的的参参数数表表,最最后后是是右右括括号号。例例如如,要要计计算算并并且且打打印印出出900的的平平方方根根,调用方法的语句格式:调用方法的语句格式:System.out.prtntln(Math.sqrt(900);注意,所有Math类方法的调用必须采用方法名前冠以类名Math和点(.)运算符的形式。【例 4.2】掷一个六面骰子6000次的程序 4.4访问控制符访问控制符Java推出了“访问控制修饰符”的概念,允许库创建者声明哪些东西是客户程序员可以

35、使用的,哪些是不可使用的。这种访问控制的级别在“最大访问”和“最小访问”的范围之间,分别包括:public,“defaut”(无关键字),protected以及private。下面的列表说明访问控制修饰符含义:类的访问控制修饰符(一种符号)类的访问控制修饰符(一种符号)public公共访问公共访问属性与方法的访问控制修饰符(四种符号)属性与方法的访问控制修饰符(四种符号)符号符号publicprotectedprivateprotectedpriva含义含义公共访问公共访问保护访问保护访问私有保护访问私有保护访问私有访问私有访问4.4访问控制符访问控制符v4.4.1公共访问控制符公共访问控制符

36、public Java中类的访问控制符只有一个:public,即公共的。一个类被声明为公共类,表明它可以被所有的其他类所访问和引用,这里的访问和引用是指这个类作为整体是可见和可使用的,程序的其他部分可以创建这个类的对象、访问这个类内部可见的成员变量和调用它的可见的方法。 一个类作为整体对程序的其他部分可见,并不能代表类内的所有属性和方法也同时对程序的其他部分可见,前者只是后者的必要条件,类的属性和方法能否为所有其他类所访问,还要看这些属性和方法自己的访问控制符。 实例字段应用public关键字,这是一种非常糟糕的做法,破坏封装。4.4.2缺省访问控制符缺省访问控制符 假如一个类没有访问控制符,

37、说明它具有缺省的访问控制特性。这种缺省的访问控制权规定该类只能被同一个包中的类访问和引用,而不可以被其他包中的类使用,这种访问特性称为包访问性。通过声明类的访问控制符可以使整个程序结构清晰、严谨,减少可能产生类间干扰和错误。 4.4.3私有访问控制符私有访问控制符private 用private修饰的属性或方法只能被该类自身所访问和修改,而不能被任何其他类,包括该类的子类,来获取和引用。v1.对私有数据访问的方法对私有数据访问的方法例如有三个实例字段,它们含有在Employee类的实例内部被操作的数据。private string name;private double salary;priv

38、ate Date hireDay; private(私有的)关键字用来确保可以访问这些实例字段的只能是Employee类本身的方法。4.4.3私有访问控制符私有访问控制符privatev2.私有方法私有方法 在实现类时,我们使所有的数据字段都是私有的,因为公开的数据是危险的。对于方法又是什么情况呢?虽然大多数方法是公开的,但是私有方法也经常使用。这些方法只能被同一个分离的方法。 总起来说,在下面的情况下可以选择私有方法:(1)与类的使用者无关的那些方法。 (2)如果类的实现改变了,不容易维护的那些方法。 4.4.4保护访问控制符保护访问控制符protectedv用用protected修修饰饰的

39、的成成员员变变量量可可以以被被三三种种类类所所引引用用:该该类类自自身身、与与它它在在同同一一个个包包中中的的其其他他类类、在在其其他他包包中中的的该该类类的的子子类类。使使用用protected修修饰饰符符的的主主要要作作用用是是允允许许其其他他包包中中的的它它的的子子类类来来访访问问父父类类的的特特定定属性。属性。vprotected关关键键字字为为我我们们引引入入了了一一种种名名为为“继继承承”的的概概念念,它它以以现现有有的的类类为为基基础础,并并在在其其中中加加入入新新的的成成员员,同同时时不不会会对对现现有有的的类类产产生生影影响响我我们们将将这这 种种 现现 有有 的的 类类 称

40、称 为为 “基基 础础 类类 ”或或 者者 “基基 本本 类类”(BaseClass)。亦亦可可改改变变那那个个类类现现有有成成员员的的行行为为。对对于于从从一一个个现现有有类类的的继继承承,我我们们说说自自己己的的新新类类“扩扩展展”(extends)了那个现有的类。了那个现有的类。v4.4.5私有保护访问控制符私有保护访问控制符privateprotectedprivate和protected按顺序连用构成一个完整的访问控制符:私有保护访问控制符。用pnvateprotected修饰的成员变量可以被两种类访问和引用,一种是该类本身,一种是该类的所有子类,不论这些子类是与该类在同一个包里,还

41、是处于其他的包中。 相对于protected,privateprotected修饰符把同一包内的非子类排除在可访问的范围之外,使得成员变量更专有于具有明确继承关系的类,而不是松散地组合在一起的包。 访问控制符访问控制符当前当前类类(D)当前类的所有子当前类的所有子类类(C)当前类所在的当前类所在的包包(B)所有类所有类(A)privateprotected*publicprivateprotected图图4-3程序中的访问控制区域程序中的访问控制区域4.5静态修饰符、静态字段和方法v4.5.1静态修饰符静态修饰符(2)另一种情形是我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,

42、即使没有创建对象,也需要一个能调用的方法。static一项重要的用途就是帮助我们在不必创建对象的前提下调用那个方法。 4.5静态修饰符、静态字段和方法v4.5.1静态修饰符静态修饰符static称为静态修饰符,它可以修饰类中的属性和方法。使用static(静态)关键字,可满足两方面的要求:(1)一种情形是只想用一个存储区域来保存一个特定的数据无论要创建多少个对象,甚至根本不创建对象;被static修饰的属性称为静态属性,这类属性一个最本质的特点是:它们是类的属性,而不属于任何一个类的具体对象。换句话说,对于该类的任何一个具体对象而言,静态属性是一个公共的存储单元,任何一个类的对象访问它时,取到

43、的都是相同的数值,同样任何一个类的对象去修改它时,也都是在对同一个内存单元做操作。v4.5.2静态字段静态字段 如如果果把把一一个个字字段段定定义义为为static.(静静态态的的),那那么么在在一一个个类类中中只只能能有有一个这类字段。一个这类字段。v4.5.3静态常量静态常量 静静态态变变量量是是很很少少见见的的。然然而而,静静态态常常量量却却很很普普遍遍。例例如如,MathMath类类中中定定义了一个静态常量:义了一个静态常量:public class Mathpublic class Math public static final double PI=3.1.415926535897

44、9323846;public static final double PI=3.1.4159265358979323846; v4.5.4静态方法静态方法v4.5.5main方法方法4.5.4静态方法静态方法声明一个方法为声明一个方法为static至少有三重含义:至少有三重含义:(1)使使用用这这个个方方法法时时,应应该该使使用用类类名名做做前前缀缀,而而不不是是某某一一个具体的对象名;个具体的对象名;(2)static的的方方法法是是属属于于某某个个对对象象的的方方法法,在在这这个个对对象象创创建建时时对对象象的的方方法法在在内内存存中中拥拥有有自自己己专专用用的的代代码码段段;而而stat

45、ic的的方方法法是是属属于于整整个个类类的的,它它在在内内存存中中的的代代码码段段将将随随着着类类的定义而分配和装载,不被任何一个对象专有;的定义而分配和装载,不被任何一个对象专有;(3)由由于于static方方法法是是属属于于整整个个类类的的,所所以以它它不不能能操操纵纵和和处处理理属属于于某某个个对对象象的的成成员员变变量量,而而只只能能处处理理属属于于整整个个类类的的成员变量。成员变量。4.5.5main方法方法main方方法法并并不不对对任任何何对对象象施施加加操操作作。实实际际上上,当当程程序序开开始始执执行行时时,还还不不存存在在任任何何对对象象。静静态态方方法法被被执执行行,并构

46、造程序所需的对象。并构造程序所需的对象。提示提示每个类都可以有一个每个类都可以有一个main方法。这是对类进行方法。这是对类进行单元测试的一个很方便技巧。单元测试的一个很方便技巧。4.6抽象类与抽象方法v4.6.1抽象类抽象类v当一个类被声明为abstract时,这个类被称为是抽象类。所谓抽象类就是没有具体实例对象的类。v针对这个问题,Java专门提供了一种机制,名为“抽象方法”。它属于一种不完整的方法,只含有一个声明,没有方法主体。下面是抽象方法声明时采用的语法:vabstract void X();v人类就是一个典型的抽象类。我们知道,类是对象的集合,对象是类的实例化,而人类这个类却不存在

47、一个仅属于它的具体对象。 abstract是抽象修饰符,可以用来修饰类或方法。v4.6.2抽象方法抽象方法 作作为为类类方方法法修修饰饰符符,abstract则则声声明明了了一一种种仅仅有有方方法法头头,而而没没有有具具体体的的方方法法体体和和操操作作实实现的抽象方法。现的抽象方法。可可见见,abstractabstract方方法法只只有有方方法法头头的的声声明明,而而用用一一个个分分号号来来代代替替方方法法体体的的定定义义:至至于于方方法法体体的的具具体体实实现现,那那是是由由当当前前类类的的不不同同子子类类在它们各自的类定义中完成的。在它们各自的类定义中完成的。需需要要特特别别注注意意的的

48、是是,所所有有的的抽抽象象方方法法,都都必必须须存在于抽象类之中。存在于抽象类之中。除除了了抽抽象象方方法法,抽抽象象类类也也可可以以有有具具体体的的数数据据和和方方法法。例例如如,PersonPerson类类存存储储人人的的名名字字并并且且用用一一个个具体的方法来返回它。具体的方法来返回它。 在在Java编编程程语语言言中中抽抽象象方方法法是是非非常常重重要要的的概概念念。在接口里你会大量的用到它。在接口里你会大量的用到它。4.7最终类、最终属性、最终方法与终结器final是最终修饰符,它可以修饰类、属性和方法。另外终结器的关键字与final很相近,一并介绍。4.7.1最终类最终类如果一个类

49、被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。被定义成final的类,通常是一些有特殊作用的、用来完成标准功能的类,将一个类定义为final则可以将它的内容、属性和功能固定下来,与它的类名形成稳定的映射关系,从而保证引用这个类时所实现的功能是准确无误的。v4.7.2最终属性最终属性无无论论static还还是是final字字段段,都都只只能能存存储储一一个个数数据据,而且不得改变。而且不得改变。许许多多程程序序设设计计语语言言都都有有自自己己的的办办法法告告诉诉编编译译器器某某个数据是个数据是“常数常数”

50、。常数主要应用于下述两个方面:。常数主要应用于下述两个方面:(1)编译期常数,它永远不会改变;)编译期常数,它永远不会改变;(2)在在运运行行期期初初始始化化的的一一个个值值,我我们们不不希希望望它它发发生生变化。变化。 可可以以把把一一个个实实例例字字段段定定义义为为final(不不能能改改变变的的)。在在对对象象被被构构造造时时,这这种种字字段段必必须须被被初初始始化化。即即,必必须须保保证证在在每每一一个个构构造造函函数数结结束束之之前前其其值值已已被被设设定定。以后字段的值不能改变。以后字段的值不能改变。4.7.3最终方法最终方法之之所所以以要要使使用用final方方法法,可可能能是是

51、出出于于对对两两方方面面理理由由的的考考虑。虑。第第一一个个是是为为方方法法“上上锁锁”,防防止止任任何何继继承承类类改改变变它它的的本本来来含含义义。设设计计程程序序时时,若若希希望望一一个个方方法法的的行行为为在在继继承承期期间间保保持持不变,而且不可被覆盖或改写,就可以采取这种做法。不变,而且不可被覆盖或改写,就可以采取这种做法。 采用采用final方法的第二个理由是程序执行的效率方法的第二个理由是程序执行的效率。4.8 本章小结 v1.关于类关于类v必必须须要要学学会会如如何何创创建建、引引用用和和继继承承已已建建立立的的类类。Java程程序序的的基基本本单单位位是是类类。类类的的定定

52、义义可可以以看看作作是是建建立立对对象象的的原原形形。你你建建立立类类之之后后,就就可可用用它它来来建建立立许许多多你你需需要要的的对对象象。Java把把每每一一个可执行的成分都变成类,使面向对象发展到极点。个可执行的成分都变成类,使面向对象发展到极点。v类的基本定义方法如下:类的基本定义方法如下:v修修饰饰符符class类类名名extends父父类类implements接接口口名名vv类成员变量声明类成员变量声明v类方法声明类方法声明v2关于对象关于对象v对对象象是是类类的的一一个个实实例例,类类是是同同种种对对象象的的抽抽象象综综合合,是是创创建建对对象象的的模模板板。在在程程序序中中创创

53、建建个个对对象象将将在在内内存存中中开开辟辟一一块块空空间间,其其中中包包括括该该对对象的属性和方法。象的属性和方法。v创建对象使用关键字运算符创建对象使用关键字运算符new。v3关于构造函数关于构造函数构构造造函函数数是是类类的的一一种种特特殊殊方方法法,它它的的特特殊殊性性主主要要体体现现在如下的几个方面:在如下的几个方面:(1)构造函数的方法名与类名相同。)构造函数的方法名与类名相同。(2)构造函数没有返回类型。)构造函数没有返回类型。(3)构构造造函函数数的的主主要要作作用用是是完完成成对对类类对对象象的的初初始始化化工作。工作。(4)构造函数不能由编程人员显式地直接调用。)构造函数不

54、能由编程人员显式地直接调用。(5)在在创创建建一一个个类类的的新新对对象象的的同同时时,系系统统会会自自动动调调用该类的构造函数为新对象初始化。用该类的构造函数为新对象初始化。4关于方法关于方法v4关于方法关于方法v方方法法的的基基本本组组成成部部分分包包括括方方法法头头与与方方法法体体两两部部分分,下下面面便便是是它最基本的形式:它最基本的形式:v修修饰饰符符返返回回类类型型方方法法名名(参参数数列列表表)throws例例外外名名1,例外名,例外名2vv方法体:方法体:v局部变量声明;局部变量声明;v语句序列;语句序列;vv(1)算算法法中中需需要要细细化化的的步步骤骤、程程序序中中重重复复

55、的的代代码码以以及及重重载载父类方法都可以定义成类的方法。父类方法都可以定义成类的方法。v(2)方法通常具有相对独立的功能和明确的输入输出接口。)方法通常具有相对独立的功能和明确的输入输出接口。4关于方法关于方法v(3)定义方法分定义方法头和方法体两部分。)定义方法分定义方法头和方法体两部分。v(4)方方法法头头包包括括方方法法名名、参参数数列列表表、返返回回值值类类型型、方方法法修修饰饰符符和和方方法法抛抛出出的的例例外外列列表表。重重载载方方法法的的方方法法头头要要与与其其父类方法的方法头基本一致。父类方法的方法头基本一致。v(5)方方法法命命名名要要遵遵循循Java对对标标识识符符的的规

56、规定定:以以字字母母、$或或开头,由字母、数字组成。开头,由字母、数字组成。v(6)参参数数列列表表是是方方法法的的输输入入接接口口,它它列列出出了了一一系系列列形形式式参参数数的的类类型型和和名名称称,方方法法通通过过它它们们接接收收外外界界输输入入的的数数据据;参参数数列列表表必必须须括括在在方方法法名名后后面面的的小小括括号号里里,小小括括号号是是方方法法的标志,如果方法不需要输入数据,小括号里可以为空。的标志,如果方法不需要输入数据,小括号里可以为空。v5其它其它(1)永远保持数据私有。这是首先需要考虑的最重要的一点:)永远保持数据私有。这是首先需要考虑的最重要的一点:(2)永永远远初

57、初始始化化数数据据。Java并并不不对对本本地地变变量量初初始始化化,但但它它会会初初始始化对象中的实例字段。但是永远不要依赖于默认值化对象中的实例字段。但是永远不要依赖于默认值; ;(3)不要在一个类中使用太多的基本类型。)不要在一个类中使用太多的基本类型。(4)用标准形式对类定义。我们总是以下面的次序列出类的内容:)用标准形式对类定义。我们总是以下面的次序列出类的内容:公开部件;包作用域部件;私有部件公开部件;包作用域部件;私有部件在每一部分内我们列出次序如下:在每一部分内我们列出次序如下:实例方法;静态方法;实例字段;静态字段实例方法;静态方法;实例字段;静态字段(5)把有太多职责的类分解。)把有太多职责的类分解。(6)使类和方法的名字反映它们的职责。)使类和方法的名字反映它们的职责。(7)类类及及其其成成员员修修饰饰符符关关系系:下下表表是是为为了了帮帮助助理理解解而整理,请结合前面的内容,加深理解。而整理,请结合前面的内容,加深理解。类修饰符类成员Public公共类缺省abstract抽象类无对象Final最终类成员访问控制符public所有其他类皆可访问本包中的类可以访问protected本包中其他类和所有其他包中的子类本包中的其他类privateprotected仅该类的所有子类仅该类当前包中子类private仅该类本身可以访问非法缺省本包中的类可以访问

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号