第第六六章章抽抽象象、、封封装装与与类类主主要要内内容容一一、、抽抽象象与与封封装装二二、、JJaavvaa的的类类三三、、对对象象的的创创建建与与使使用用四四、、参参数数传传递递五五、、匿匿名名对对象象11、、抽抽象象抽抽象象内内涵涵去去除除掉掉对对象象中中与与主主旨旨无无关关的的次次要要部部分分,,或或是是暂暂时时不不予予考考虑虑的的部部分分抽抽取取出出与与研研究究工工作作有有关关的的实实质质性性的的内内容容加加以以考考察察软软件件开开发发方方法法中中所所使使用用的的抽抽象象类类型型((11))过过程程抽抽象象((22))数数据据抽抽象象((11))过过程程抽抽象象将将整整个个系系统统功功能能划划分分为为若若干干部部分分,,强强调调功功能能完完成成的的过过程程和和步步骤骤面面向向过过程程的的软软件件开开发发方方法法采采用用的的就就是是这这种种抽抽象象方方法法使使用用过过程程抽抽象象有有利利于于控控制制、、降降低低整整个个程程序序的的复复杂杂度度缺缺点点::这这种种方方法法本本身身自自由由度度较较大大,,难难于于规规范范化化和和标标准准化化,,操操作作起起来来有有一一定定难难度度,,在在质质量量上上不不易易保保证证((22))数数据据抽抽象象22、、封封装装利利用用抽抽象象数数据据类类型型将将数数据据和和操操作作封封装装在在一一起起数数据据被被保保护护在在抽抽象象数数据据类类型型的的内内部部系系统统其其他他部部分分只只能能通通过过被被授授权权操操作作与与抽抽象象数数据据交交互互在在面面向向对对象象程程序序设设计计中中抽抽象象数数据据类类型型通通过过““类类””来来代代表表每每个个类类都都封封装装相相关关的的数数据据和和操操作作在在实实际际开开发发过过程程中中类类常常用用来来构构建建系系统统内内部部的的模模块块封封装装特特性性把把类类内内的的数数据据保保护护得得很很严严密密,,模模块块与与模模块块间间仅仅通通过过严严格格控控制制的的界界面面进进行行交交互互使使它它们们之之间间耦耦合合和和交交叉叉大大大大减减少少,,从从而而降降低低了了开开发发过过程程的的复复杂杂性性,,提提高高了了效效率率和和质质量量,,减减少少了了可可能能的的错错误误保保证证程程序序中中数数据据的的完完整整性性和和安安全全性性主主要要内内容容一一、、抽抽象象与与封封装装二二、、JJaavvaa的的类类三三、、对对象象的的创创建建与与使使用用四四、、参参数数传传递递五五、、匿匿名名对对象象二二..JJaavvaa的的类类11..JJaavvaa类类概概念念22..类类的的定定义义与与修修饰饰33..域域44..方方法法11、、JJaavvaa类类概概念念类类((CCllaassss))和和对对象象((OObbjjeecctt))是是面面向向对对象象程程序序设设计计方方法法中中最最核核心心的的概概念念。。类类是是对对某某一一类类事事物物的的描描述述((共共性性)),,是是抽抽象象的的、、概概念念上上的的定定义义;;对对象象则则是是实实际际存存在在的的属属该该类类事事物物的的具具体体的的个个体体((个个性性)),,因因而而也也称称为为实实例例((IInnssttaannccee))。。11、、JJaavvaa类类概概念念类类是是JJaavvaa程程序序的的基基本本组组成成要要素素封封装装了了一一类类对对象象的的状状态态和和方方法法,,是是该该类类对对象象的的原原型型JJaavvaa程程序序设设计计就就是是定定义义类类的的过过程程JJaavvaa程程序序中中定定义义的的类类的的数数目目和和功功能能都都是是有有限限的的编编程程时时还还需需要要用用到到大大量量系系统统定定义义好好的的类类,,即即JJaavvaa类类库库中中的的类类11、、JJaavvaa类类概概念念类类的的构构成成::类类头头++类类体体类类体体由由数数据据成成员员((属属性性、、域域))与与函函数数成成员员封封装装而而成成。。JJaavvaa语语言言把把数数据据成成员员称称为为域域变变量量、、属属性性、、成成员员变变量量等等;;把把函函数数成成员员称称为为成成员员方方法法,,简简称称为为成成员员方方法法。。举举例例::圆圆柱柱体体类类。。二二..JJaavvaa的的类类11..JJaavvaa类类概概念念22..类类的的定定义义与与修修饰饰33..域域44..方方法法((11))定定义义类类定定义义类类((声声明明类类))实实际际是是定定义义类类的的静静态态属属性性和和动动态态属属性性((方方法法))。。用用户户定定义义一一个个类类实实际际上上就就是是定定义义一一个个新新的的抽抽象象数数据据类类型型。。必必须须先先定定义义类类,,然然后后才才可可利利用用所所定定义义的的类类来来声声明明相相应应的的变变量量,,并并创创建建对对象象。。((11))定定义义类类定定义义类类的的语语法法结结构构((11))定定义义类类————实实例例实实例例::圆圆柱柱体体类类的的定定义义((22))类类的的修修饰饰符符JJaavvaa程程序序在在定定义义类类时时,,可可在在ccllaassss之之前前增增加加若若干干类类的的修修饰饰符符,,修修饰饰限限定定所所定定义义的的类类的的特特性性类类的的修修饰饰符符分分为为访访问问控控制制符符和和非非访访问问控控制制符符两两大大类类,,有有些些类类的的修修饰饰符符也也可可以以用用来来修修饰饰类类中中的的域域或或方方法法本本节节讨讨论论类类的的非非访访问问控控制制符符((22))类类的的修修饰饰符符————aabbssttrraacctt抽抽象象类类是是没没有有具具体体对对象象的的概概念念类类抽抽象象类类不不能能直直接接被被实实例例化化,,一一般般作作为为其其它它类类的的超超类类举举例例假假设设““鸟鸟””是是一一个个类类,,它它可可以以派派生生出出若若干干个个子子类类如如““鸽鸽子子””、、““燕燕子子””、、““麻麻雀雀””、、““天天鹅鹅””等等问问题题::那那么么是是否否存存在在一一只只实实实实在在在在的的鸟鸟,,它它既既不不是是鸽鸽子子,,也也不不是是燕燕子子或或麻麻雀雀,,它它不不是是任任何何一一种种具具体体种种类类的的鸟鸟,,而而仅仅仅仅是是一一只只抽抽象象的的““鸟鸟””呢呢??((22))类类的的修修饰饰符符————aabbssttrraacctt抽抽象象类类是是其其所所有有子子类类的的公公共共属属性性的的集集合合使使用用该该特特性性可可提提高高程程序序开开发发和和维维护护效效率率以以““鸟鸟””的的概概念念为为例例假假设设需需要要向向别别人人描描述述““天天鹅鹅””是是什什么么,,通通常常都都会会这这样样说说::““天天鹅鹅是是一一种种脖脖子子长长长长,,姿姿态态优优美美的的候候鸟鸟””可可见见定定义义是是建建立立在在已已知知道道什什么么是是““鸟鸟””的的前前提提之之上上只只有有在在被被进进一一步步问问及及““鸟鸟””是是什什么么时时,,才才会会具具体体解解释释说说::““鸟鸟是是一一种种长长着着翅翅膀膀和和羽羽毛毛的的卵卵生生动动物物””而而不不会会在在一一开开始始就就把把““天天鹅鹅””描描述述成成““是是一一种种脖脖子子长长长长,,姿姿态态优优美美,,长长着着翅翅膀膀和和羽羽毛毛的的卵卵生生动动物物””((22))类类的的修修饰饰符符————aabbssttrraacctt举举例例已已有有两两个个类类CCiirrccllee和和RReeccttaannggllee,,完完成成相相关关参参数数计计算算((22))类类的的修修饰饰符符————aabbssttrraacctt举举例例问问题题假假设设有有若若干干个个CCiirrccllee,,以以及及若若干干个个RReeccttaannggllee,,希希望望计计算算它它们们的的总总面面积积直直截截了了当当的的做做法法是是将将它它们们分分别别放放到到两两个个数数组组中中,,用用两两个个循循环环,,加加上上一一个个加加法法,,这这种种做做法法不不是是最最理理想想的的如如果果还还有有其其它它形形状状,,ttrriiaannggllee,,eelllliippsseess等等上上述述方方法法显显得得““累累赘赘””我我们们希希望望有有一一种种统统一一的的表表示示,,例例如如用用一一个个数数组组sshhaappee[[]],,接接受受所所有有的的形形状状,,然然后后用用ffoorr((ii==00;;iisshhaappee..lleennggtthh;;ii++++))aarreeaa__ttoottaall++==sshhaappee[[ii]]..aarreeaa(());;((22))类类的的修修饰饰符符————aabbssttrraacctt举举例例解解决决方方案案((33))类类的的修修饰饰符符————ffiinnaallffiinnaall所所修修饰饰的的类类不不可可以以有有子子类类如如果果把把一一个个应应用用中中有有继继承承关关系系的的类类组组织织成成一一棵棵倒倒长长的的树树,,所所有有类类的的父父类类是是树树根根,,每每一一个个子子类类是是一一个个分分支支,,那那么么声声明明为为ffiinnaall的的类类就就只只能能是是这这棵棵树树上上的的叶叶结结点点,,它它不不可可能能再再有有分分支支子子类类((33))类类的的修修饰饰符符————ffiinnaall被被定定义义为为ffiinnaall的的类类通通常常是是一一些些有有固固定定作作用用、、用用来来完完成成某某种种标标准准功功能能的的类类如如JJaavvaa系系统统定定义义好好的的用用来来实实现现网网络络功功能能的的IInneettAAddddrreessss、、SSoocckkeett等等在在JJaavvaa程程序序中中,,当当通通过过类类名名引引用用一一个个类类或或其其对对象象时时实实际际真真正正引引用用的的既既可可能能是是这这个个类类或或其其对对象象本本身身也也可可能能是是这这个个类类的的某某个个子子类类及及子子类类的的对对象象,,即即具具有有一一定定的的不不确确定定性性将将一一个个类类定定义义为为ffiinnaall,,则则可可以以将将它它的的内内容容、、属属性性和和功功能能固固定定下下来来,,与与它它的的类类名名形形成成稳稳定定的的映映射射关关系系,,从从而而保保证证引引用用这这个个类类时时所所实实现现的的功功能能的的正正确确无无误误补补充充::aabbssttrraacctt与与ffiinnaall的的使使用用注注意意点点aabbssttrraacctt和和ffiinnaall修修饰饰符符不不能能同同时时修修饰饰一一个个类类因因为为aabbssttrraacctt类类自自身身没没有有具具体体对对象象,,需需要要派派生生出出子子类类后后再再创创建建子子类类的的对对象象ffiinnaall类类不不可可能能有有子子类类,,这这样样aabbssttrraaccttffiinnaall类类就就无无法法使使用用,,也也就就没没有有意意义义但但是是aabbssttrraacctt和和ffiinnaall可可以以各各自自与与其其他他修修饰饰符符合合用用例例如如一一个个类类可可以以是是ppuubblliiccaabbssttrraacctt的的,,也也可可以以是是ppuubblliiccffiinnaall的的这这里里的的ppuubblliicc是是访访问问控控制制符符当当一一个个以以上上的的修修饰饰符符修修饰饰类类或或类类中中的的域域、、方方法法时时,,这这些些修修饰饰符符之之间间以以空空格格分分开开,,写写在在cc