17.面向对象特征——封装
前面说了隐藏,那么顺理成章的,下面就是封装。
有了隐藏,封装的存在就有其重要的目的了。
前面我们已经将类中的属性修饰为private,隐藏起来,只能在类本身里面来操作。那么很多时候,属性的信息数据都是来自于其他的用户(其他类或者对象),那么其他的类和对象如何把信息数据交给对象,由相应的属性进行记录保存?
这就是封装了。
先看看封装的简单说明:
封装指的是将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元的机制。
Java中通过将数据封装、声明为私有的(private),再提供一个或多个公开的(public)方法实现对该属性的操作。
从说明可以看出,封装是一个很实际的类的声明操作。我们将类的属性通过private声明为私有,但是同时也想让该属性在有限制的情况下提供给其他的类和对象来操作,就是封装,定义一个或者多个公开的public的方法实现对属性的操作。其他类和对象并不是直接对属性进行操作,而是将要操作的数据传递给公开的属性封装方法,由这些封装方法来完成具体的操作。
当然,具体如何实现操作,就是由类的声明人来定义了。就像是前面示例的set方法,当其他用户提供了年龄的数据,首先进行数据的检查,看是否符合逻辑要求,就像是输入数据的重复确认一样,防止错误的垃圾数据进入程序操作。
上面封装的说明,就是具体的封装操作。实际上,可以看做是Java类定义的一个基本要求。如无特殊要求,可以在声明类的时候,就按照封装的要求来进行类的声明。所有类的属性声明为private私有,在定义相关的属性的读写方法来实现对属性的操作。并且有这样的Java bean要求,一个Java bean就是一个最简单的java程序组件。java bean对类的属性的声明以及读写方法有这样的标准要求,这已经是Java开发的标准了,所有的java开发人员、Java软件、api等等,都遵循这个要求。如果你的代码复合Java bean的标准的话,会对你以后的额Java开发带来很大的便利。
Java bean要求类属性私有,属性的读方法:
public 属性的数据类型 get属性名称(){
}
其中,方法名中的属性名,第一个字母要大写。
属性的写方法:
public void set属性名称(属性数据类型 传入参数){
}
读写方法的内部逻辑可以根据实际情况来完成,方法的定义标准不能变,这样,Java平台会根据相应的get和set方法,识别出该方法分别是那个属性的读写方法(甚至即使在类里面,根本没有这个属性,话句话说,Java平台识别属性依据的是get和set方法)
Java bean先说到这里,等以后对Java了解跟多之后,这个标准就更容易理解了。
最后,补充说明一下封装的操作目的,这几个目的,在下一篇里面,结合我的实际开发经验,说说其重要的意义:
隐藏一个类的实现细节;
防止对封装数据的未经授权的访问。使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
有利于保证数据的完整性;
便于修改,增强代码的可维护性。
实现封装的关键是不要让方法直接访问其他类的属性,程序应该只能通过指定的方法 与对象的数据交互。封装赋予对象“黑盒”特性,这是实现重用性和可靠性的关键。