龙空技术网

不知道Java的封装到底怎么用?超简单理解封装的概念及应用-09

你的老师父 160

前言:

当前咱们对“java封装的作用”都比较注意,兄弟们都需要知道一些“java封装的作用”的相关知识。那么小编同时在网摘上网罗了一些关于“java封装的作用””的相关资讯,希望大家能喜欢,咱们快快来学习一下吧!

到这里,对象和包基本告一段落,那现在咱们先解决一个棘手的问题:访问修饰符和面向对象特征!

一、什么是访问修饰符?

前面讲了面向对象,对象都有属性,比如人类,有姓名,有年龄,这些其实都是隐私,不会轻易告诉任何人

那既然所有人的姓名、年龄、性别都是隐私,也就是人类的这些属性是隐私的,对不对。在Java中,这些隐私同样是可以封装起来的,不对外开放

那在Java中,这些隐私的信息怎么表达呢?

二、私有访问权限:private

1、属性加private

这里要介绍一个修饰符叫做private!只要在你定义类的属性的时候,在变量的类型前边加上private,那其他类就不会轻易获取到我们这些信息了。

比如private String name; 是不是很熟悉,咱们前边代码中用过,只不过那时候还不是讲访问修饰符的时机。

那现在时机到了,看我下边代码

首先新建了个Person类,人类中有个name属性,那这个属性呢我让他的name是private的权限,那你看到,不管是构造方法中,还是sayHello方法中,还是writeName中,name属性都可以直接使用。(关于方法的定义如果大家忘了,看看第5篇文章)

之后我建了一个公司类,那公司需要雇佣人去帮他们完成工作。那公司就得有人,比如只有一个人,那定义一个属性person,但是还得有合同或者档案得记录这个人的姓名,就简单点,一个String类型的recode属性吧,只记录员工的姓名。

还需要定义一个方法,用来执行雇佣人的动作,就叫employ吧。

还得需要一个方法,用来打印有谁在公司,就叫printRecode吧。

那看下边代码:

那recode怎么赋值啊?

试试下边这种方式:

诶?person中不是有name属性吗?之前写的代码没见过变成红色的报错啊!怎么现在不行了,老师父你把我绕蒙了。

这是private的作用:private只能保证在本类中的方法中可以调用,其他类的方法中是不能调用的!

那怎么办?还好Person类中定义了写名字的动作,人类可以自己写下自己的名字,看下边:

那这样recode就是person.writeName()返回的那个字符串了!

2、方法上加private

前边说了在属性上加private,属性就不能被其他类来访问了,方法也是一样的,在方法上加上private后,你的方法也是不会再被其他类调用了!

那大家自己试试,让person的sayHello()方法变成私有的,看其他类是否还能够调用到吧!

三:公有访问权限:public(这个先说了吧,方便解释封装的概念)

那如果我就想让公司知道我的名字!我任性,我在衣服上写上我的名字!

没问题,打开Person,看下边的操作:

看到没,把name属性改为public就可以了!

再回到公司类:

看employ这个方法,再调用person.name就没有问题了!

那public的特性大家应该明白了:属性设置为public后,所有类都可以使用了!这个是所有访问权限中权限最高的。

四:面向对象三大特征之一:封装

讲完private后,不得不说面向对象的核心内容了:面向对象三大特征。我当时学的时候,没有理解三大特征的精髓,但是这篇文章我尽量讲清楚,我曾经走过的坑都会说出来。

封装是面向对象三大特征中最好理解的,什么意思呢,说白了,就是要把关键的,没必要给其他人看的逻辑和熟悉密封好,装起来,不让其他人看。

那怎么去做的?对,没错,就是用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来降低一些线程导致的数据问题。

如果大家实在不理解,请先收藏这篇文章,我理解大家,我刚学的时候也是这样,但是等以后大家用一段时间之后,再回头来翻翻这篇文章,相信大家会会心一笑!

这篇文章篇幅有点长,其实就讲了两个知识点:

1、private访问权限修饰符

2、面向对象三大特征之一:封装

希望大家好好理解理解,现在这个阶段概念是很重要的,如果理解不了一定要留言!

标签: #java封装的作用