黑马程序员:【Java基础】面向对象-类的封装.doc_第1页
黑马程序员:【Java基础】面向对象-类的封装.doc_第2页
黑马程序员:【Java基础】面向对象-类的封装.doc_第3页
黑马程序员:【Java基础】面向对象-类的封装.doc_第4页
全文预览已结束

下载本文档

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

文档简介

封装是指隐藏对象的属性和实现细节,仅仅对外公开接口。封装能为软件系统带来以下优点:1:便于正确方便的理解和使用系统,防止使用者错误修改系统的属性。以供电系统为例,过去房屋隔壁的上方都是电线,现在的房屋电线都看不见了,在墙壁上只露出一些电源插口,为啥要把电线隐藏起来呢?理由很简单,暴露在外面的电线既不安全也不美观。再比如电视剧系统,尽管本身的实现很复杂,但用户很方便,电视剧的实现细节都被藏在壳子里面,没有必要向用户公开。2:有助于建立各个系统之间的松耦合关系,提供系统的独立性。当一个系统的实现发送变化时,只要它的接口不变,就不会影响其他的系统。3:提供软件的可重用性,每个系统都是一个相对独立的整体,可以在多种环境下得到重用。例如,干电池就是独立的,它可以在手电筒,相机中都能发挥作用。4:降低构建大型系统的风险,即使整个系统不成功,个别独立的系统可能仍然有价值。例如相机坏了,里面的电池还是有用的,还可以安装到手电筒中。在java面向对象编程语言中,主要是通过访问控制机制来进行封装,这种机制能控制对象的属性和方法的可访问性。在Java中提供了以下四种访问控制级别。l public:对外公开,访问级别最高l protected:只对同一个包中的类或者子类公开l 默认:只对同一个包中的类公开。l private:不对外公开,只能在对象内部访问,访问级别最低。灵活运用这四种访问级别可以有效的控制对象的封装程度,那么到底哪些对象的属性和法应该公开,哪些应该隐藏呢?这必须具体分析,下面是封装的两个大致原则:1:把尽可能多的东西藏起来,对外提供简捷的接口 系统的封装度越高,那么它的独立性就越高,而且使用起来越方便,例如半自动洗衣机HalfAutoWasher和全自动洗衣机AutoWasher就是个明显的例子。以下程序演示的是半自动洗衣机的过程。HalfAutoWasherwasher=newHalfAutoWasher();/开始洗衣服washer.on();/开机/洗涤washer.inputWater();/放水washer.setTimer(5);/定时5分钟washer.wash();/洗涤washer.dischargeWater();/排水/第一次清洗washer.inputWater();/放水washer.setTime(5);/定时5分钟washer.wash();/洗涤washer.dischargeWater();/排水/第二次清洗washer.inputWater();/放水washer.setTime(5);/定时5分钟washer.wash();/洗涤washer.dischargeWater();/排水/为衣服脱水washer.setTime(8);/定时八分钟washer.dehydrate();/脱水washer.off();/关机以下程序演示全自动洗衣机洗衣服的过程。AutoWasherwasher=newAutoWasher();/开始洗衣服washer.on();/开机washer.setMode(标准模式);/设置洗衣机模式washer.start();/开始洗衣服,洗衣结束后,30分钟内洗衣机会自动关机对比以上代码,可以看出全自动洗衣机封装了进水,排水和定时等洗衣服的细节,为使用者提供了更加简单易用的接口,所以用全自动洗衣机洗衣服更方便。2:把所有的属性藏起来假如某种属性允许外界访问,那么提供访问该属性的公开方法,假如电视剧有个音量属性volume,这是允许使用者访问的。使用者通过setVolume()和getVolume()方法来访问这个属性。privateintvolume;/*设置音量*/publicvoidsetVolume(intvolume) this.volume=volume;/*查看当前音量*/publicintgetVolume() return volume;为什么volume属性要设置为public呢?其实这样做有以下原因:(1)更符合真实世界中外因通过内因起作用的客观规律,一个对象的属性发生变化应该是外因和内因共同作用的。外因就是使用者可以向电视机发送消息,请求调解音量。内因就是电视机本身有音量控制装置来调解音量。(2)能够灵活的控制属性的读和修改的访问级别。对象的有些属性只允许使用者读,但不允许使用者修改,而只有内部对象才能修改,例如电表的用电度数。(3)防止使用者错误的修改属性。例如银行账号Account对象有一个密码口令,当用户设置密码口令时,要求密码必须是6位数。如下所示:publicvoidsetPassword(String password)if(password=null|password.length()!=6)thrownewIllegalArgumentException(口令不合法);elsethis.password=password;(4)有助于对象封装实现细节,有时候,

温馨提示

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

评论

0/150

提交评论