JavaEE程序猿之封装(19)

竹迩经常说,有一些题叫做红线题,就是面试的时候如果没答上来就可以say goodbye没商量的;比如这道:面向对象的特征是什么?你一定要很熟练的回答:

封装  继承  多态  抽象

在随后的几篇文章里,竹迩将挨个为大家介绍这几大特征;今天,我们就从继承说起了;

竹迩说:什么是封装?密封装起来,不让外面看到;

竹迩喜欢用下面这个网红来讲解封装:


JavaEE程序猿之封装(19)_第1张图片


不晓得会不会被追究肖像权呢?

这位是我们的王思聪网红,他作为一个具体存在的对象,是属于人类吧;竹迩经常说,八卦不好;但是我相信很多人都想八卦:王思聪有多少钱???

按照类的实例化变成对象:要将属性填上具体的值;而对象的属性值是可以通过对象名.属性名得到的;从而如果王思聪对象存在了,那任何一个外来的对象都可以通过王思聪.money获得王思聪有多少钱的信息,这显然不科学;

退一步,就算不是王思聪,竹迩自己变成一个对象后,也不会想随随便便一个人可以知道竹迩的money信息的;

封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

正是由于以上的现实世界的需求,所以Java提出了满足以上需求的方式:封装;

上面是百度百科对于封装的解释;

那竹迩说简单一点

将对象的某个属性隐藏起来,让程序不能轻易操作这个属性,比如王思聪的钱;

讲实现细节隐藏起来,只提供使用接口;关于这点,其实最好的解释就是方法;只需要给一些输入,方法就会给我们一些输出;至于这些输出怎么来的,那就是隐藏起来的细节了;
JavaEE程序猿之封装(19)_第2张图片


再来,如果王思聪他老爸说:乖儿子,我要转点钱给你花着玩;那他老爸怎么修改王思聪的money属性呢?这就对应到经常说的Java简单对象的标准写法:私有属性,公用setter/getter方法;

王思聪老爸不能直接操作王思聪的钱这个属性,但是他可以把钱交给王思聪让王思聪自己修改;那交给王思聪自己修改这个动作就对应到方法了;

private float money;

public void setMoney(float money){

this.money = money;

}


王思聪老爸将钱作为输出交给setMoney方法,方法作为行为,王思聪用老爸的钱修改了自己本身拥有的money属性;this.money = money;

PS:this只带当前执行该方法的对象;那就是王思聪自己了……

People 王思聪 = new People();

//这是王思聪老爸要给他的钱

float money = 10000000.0f;

//只有王思聪自己行动才能修改自己的money属性

王思聪.setMoney(money);

其实大家经常可以在Java项目中看到这种使用方式:属性私有化,提供公有的setter/getter方法去访问属性;这其实也是封装的一种具体体现;

那说了这么多,最后一个话题:

封装的好处是什么?

不需要知道细节;--都封好装起来了肯定不知道细节了;

数据保护,增加数据访问限制;--都封好装起来了,肯定就被保护好了;

增强数据的可维护性;--不能直接赋值,只能通过方法赋值;那在方法中就可以做一些判断要赋的值是否符合规范,自然数据的可维护性就变强啦;

This is over;

你可能感兴趣的:(javaee)