比如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岁,那这个人的年龄就会出问题!所以要做封装,这样数据才会安全!