面向目标三大特征之一封装简述
程序本身包括两个特色:高内聚 低耦合
高内聚便是类的内部办法咱们自己完结
低耦合低耦合便是仅对外露出少数办法作为运用
封装的规划思维便是:
把描绘一个目标的特性和行为封装成一个类 把详细的事务逻辑功用封装成一个
办法, 躲藏目标内部的杂乱性,只对外供给简略的接口,便于外界运用,从而提
高体系可扩展性以及可维护性
比方: 洗衣机只是只是为咱们供给了外部按钮,既能够完结杂乱操作
表现:将类的特点进行私有化(private),一同对外供给公共的(public)办法来获取(getxxx)以及设置(setxxx)
封装没有private、default、protected、public四大润饰符,那就不再是封装。。。
润饰类只能是public以及default(可有可不有)
封装是面向目标三大特征中最好了解的,什么意思呢,说白了,便是要把要害的,没必要给其他人看的逻辑和了解密封好,装起来,不让其他人看。
那怎样去做的?对,没错,便是用private!
在办法和特点前边加上private后,就封装了某些特点和某些办法,他们就不会对外揭露了。
先说优点:
1、削减其他人看你类的时刻,让调用的人看你代码更简略
2、由于特点和某些办法封装起来了,那让你的代码逻辑更安全!
那咱们有许多问题了,首要便是质疑以上的两点优点:
1、我写的代码比方Person这个类,假如我想知道里面的逻辑,我直接翻开去看不就好了,private的我也能看到,怎样会削减时刻,调用的人看代码怎样会简略?
2、封装起来后我并没有觉得简略啊?代码我仍是能看到啊,跟我一同作业的搭档也能看到啊?安全在哪里?
假如有这两点疑问很正常,阐明咱们学的仍是很走心的。
那我答复一下第1个问题:
第一种场景:实践作业中,咱们写的代码量是远远大于Person这类的,一个类会有几百行乃至上千行,那办法乃至会有几十个,或许这个类就完结几个简略的功用,却有几十个办法来协同作业,所以只需求把这几个简略的功用揭露出来就好。
比方Person的年纪每年自增,那怎样自增的逻辑没必要让其他人看到吧,由于代码太多,他或许只是需求运用这个类来获取这个人的年纪,所以,把年纪自增的逻辑封装起来(private润饰符),只是供给一个获取年纪的办法就能够了(public润饰符)。
这样调用你的类搭档是不是只需去看你揭露了哪些能够运用的办法就能够了?一般办法都会有注释,我前边讲过的注释规矩还记得吧,注释中一般都会写着这个办法是做什么用的,那咱们运用你这个类的时分,是不是只需看揭露的public的办法和特点以及他们的注释就足够了,没必要读完整个类,究竟咱们都挺忙的,需求分秒必争完结任务。
第二种场景:在实践作业中许多逻辑其实并不是自己写的,怎样说呢?比方文件读取操作,运用的是体系IO操作的类库,这些类库直接经过import导入类就能够运用了,那这些类代码更多,不计其数行,那你能去通读吗?显然是很难做到的,所以他们封装了许多 操作,供给出来几十个揭露的办法,这样你看揭露的办法和javadoc就能够了(/**.。..*/这种办法的注释生成的文档,便是javadoc,前边讲注释的时分提到过)
第三种场景:假如咱们去写代码,时刻长了,发现有些东西经常用,比方时刻日期的东西类,那咱们也能够把它做成类库(jar或许aar的方式),咱们习气称做sdk也便是软件开发东西(Software Development Kit),那这些类库是供给给你搭档或许其他合作伙伴用的,他们也是不会去关怀你是怎样完成的,只需求联系是不是有他们需求的功用,那这些功用揭露出来就能够了,其他的东西都private封装好,这样他们读起来是不是就简略多了。
说了这么多场景,不知道咱们有没有了解,我再举个生活上的比方吧,辅佐咱们了解:比方最近气候很热,咱们运用空调,遥控器是public的吧,咱们都能看到,也有阐明书(javadoc),那咱们就直接运用了,不用去关怀怎样完成的调高温度、调低温度、风量操控这些吧!
再答复第2个问题:
关于安全方面,比方人类这类你们公司经常用,你要把他打包到通用的sdk中,那假如你把年纪这个字段写成了public,或许你揭露了一个set办法
public void setAge(int age) {
this.age = age;
}
那这个年纪很有或许被其他人调用了setAge或许直接person.name=12,这样修改了年纪!实践上年纪应该是走你的算法,每年递加,比方上一年1岁,本年2岁,那你忽然给它设置个12岁,那这个人的年纪就会出问题!所以要做封装,这样数据才会安全!
这只是是最根底的安全,假如后边讲到多线程,还会触及数据安全的问题,也是能够经过private来下降一些线程导致的数据问题。