JAVA-初步认识-第六章-封装代码示例
一. 面向对象的特征
第一个特征:封装。
什么叫隐藏实现细节?
在这里的PersonDemo类除了创建对象外,还有什么其他作用么?为什么要有这个类出现。、
如果对age赋值为-20,DOS输出为-20。虽然输出没错,但是不符合事物的基本原则。
之所以会出现这样的不符合实际情况的数据,那是因为age在直接被其它程序创建对象后访问。说白了,我创建了一个对象,直接就访问了对象里的age数据。这就造成了安全隐患,造成了不确定性。
怎么解决这个问题?不允许访问就可以。可以使用关键字private,私有的意思,来实现这个目的。
理清一下思路,为什么要将age私有,就是age可以随便访问,同时会往里面赋一些不允许的值,产生安全隐患。
修改程序后,再进行程序执行,DOS直接报错。意思就是私有的东西只能在本类中有效。其他的里面,即使创建了对象,也访问不到。
对age进行private之后,得到的结果如下,DOS直接进行了报错。
结果表明:私有化之后,再去访问,就代表没有这个属性。也就是说把内容全都藏起来,作为对付安全隐患的手段也不合适。或者,直接对外开放也不合适。
直接对外开放,不安全。把它藏起来,访问不了。因此,要取个折中。
我们把成员变量私有了,但是可以对外提供一些方法。
方法中的age和类的成员变量的age是同一个么?
这里的思想是什么?用通俗的话来说更容易理解,一个房间有一个门,任何人都可以进入,这会造成东西的丢失。现在把这个门换成一堵墙,这样一来,安全性得到了提高,但是完全无法访问。折中的办法就是在门上装个锁,只有有钥匙的人才可以进来。上面多定义的一个方法,就是门上的锁。通过调用方法,来访问age变量。而且,我是觉着既然方法里的age和private的age不是一样的,相当于重新定义了一个age,但是如果是重新定义,不需要书写类型么?这样一来,private的age就显得没什么用,private关键字也就没什么意义。
int a中的a是输入到方法中的,它就相当于一把钥匙,它合不合适,需要用if语句来进行判断,而if语句只能放在方法中。这就是为什么定义函数的原因。不定义函数,if无法放置在类中。
补充:在门上加上锁之后,也就定义了一个含有判断语句的函数之后,类中private化age的语句没有进行删除,那么是否意味着,函数中的age可能就是private中的age呢?
对于一个变量,我们对它的操作,通常只有两个动作,要么给它赋一个值,要么把它的值拿出来用。专业术语叫,设置值和获取值。通常,设置和获取会采用一些名词来表示。
上面两个方法,一个是对age进行设置,一个是对age进行获取。
上图的两个方法是不一样的。
set和get两个方法在java中是很常见的,通常对于描述类中的成员变量,都是私有化的,而且一个变量要对应两个方法。java中提供了快捷键,自动出现设置和获取两个类(目前所学的很多都是背后的原理,虽然思维上可以有一些提升,但是在实际的应用中很难用到。)
二. 封装
通过上面的例子,我们可以明白封装的定义隐藏属性和实现细节是什么意思。