您的位置:首页 > 编程语言 > Java开发

java-面向对象编程-三大特性之封装

2017-01-20 22:24 274 查看
我们在上一章中谈到了面向对象编程的三大特性之一的继承。并且说到在继承中,父类其实是从子类中抽象出来的,而在这里所说的抽象,就可以理解为数据封装的一种表达方式。而准确来说,所谓的封装,就是在人为对客观事物进行抽象之后,将其聚合在一个类内,并且这个类可以把自己的属性和方法只让可信的类(继承)或者对象(new)操作,对不可信的进行信息隐藏。注意的是。这里说的属性并不仅仅是基本数据类型,还包括引用数据类型,也就是说,我们同样可以在一个类中封装其他类的对象,使其在这个类中实现引用类的相应办法。

其实从方法这一章开始,我们就已经开始接触到封装的知识,不过因为封装的概念过于空泛,难以用比较实际性的例子去直接阐释,更好的办法应该是在实践过程中琢磨体会。不过在这里,我们可以借用方法来解析一下什么叫封装。

我们知道当我们调用了一个sort(a)方法的时候,实际上它需要实现的操作可能是这样的:

private static void sort(int[] a) {//声明方法时,参数需要用数据类型
for(int i=0;i<a.length;i++){
for (int j = a.length-1; j > i; j--) {
if(a[j] < a[j-1]){
//交换两位置的变量,利用临时值t作为中转
int t = a[j];
a[j] = a[j-1];
a[j-1] = t;
}
}
}

}


就好比我们去饭店(原谅吃货一枚)点菜,我们是只需要跟前台说要什么菜,然后厨房会自动帮你弄出来,而不用你亲自撸起袖子在厨房里面自己煮。同样,我们也知道厨房重地不可让人随便知道,不然让客人随便进入厨房的话,厨师的技巧很有可能就被别人偷师偷走了或者客人擅自往菜里面添加或者减少了些什么,味道不好,客人就不想来了。而与此对应的是,在实际的编程生活中,为了保证信息的安全性(不被其他人擅改数据或者取得所需的数据资源),我们常常把一些机密的信息和操作弄到一块,只留下对外联系的窗口。就好比把所有的数据都装进一个黑乎乎的什么都看不到的盒子里,就留下一些需要传递的数据的窗口,当你往这个窗口里面塞进一张菜单说:“我要红烧罗非鱼”的时候,黑盒子里面的厨师就开工烧了一盘罗非鱼,然后通过这个窗口返回给你。这样的数据处理方式就叫做黑盒模型,与之对应的测试方式也叫黑盒测试。说的就是封装的一个重要意义,就是保障数据的安全性。在面向对象的过程中,我们通过权限控制管理机制对封装好的类加上权限,来限制外来者对类的操纵,借以达到保障类中数据和方法的安全的目的。可以这么说:一个类就是一个封装了相关属性及方法的逻辑实体。对于对象中的某些属性或者方法来说,它们可以是私有的,不能被外界访问。也可以是共有的,能够被外界任何人员访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分,从而使得程序出现不要的错误。

关于权限控制管理机制,主要有四个状态,分别为private,public,protectd以及default(这里的default是实体词,如果用到这个状态,不用写出来,为权限控制管理机制的默认状态)关于它们具体作用,可以用这么一张图来表示:



在这里,当一个类中的成员或者方法被添加上某种管理权限时,该类中的其他成员、同一个包中的其他类、该类的子类、甚至这个包之外的其他类对于成员或者属性的调用权限都会有十分明确的规定。譬如定义了private之后,那么就只能在这个类中调用,其他类则不行。而使用权限控制管理机制的一个准则是:“能不使用public,就不用public”,因为public的安全性是处于最低的,作为一个类中的重要属性或者方法,我们一般定义为private。否则的话要是被某些骇客利用到这点,一不小心就把用户的所有资料都给泄露了,这样的话,公司分分钟要找你谈话了呀。

好了,至此,关于封装的相关问题,也先说到这。关于封装的深入理解,还需实践中多多应用。譬如:写好了一个程序之后,沿着思路,思考在那一部分是可以继续进行抽象的,那一部分方法又是需要添加private权限的,之前写好的方法,有没有精简的可能性?等等的僧等,再开发的过程中多去想一下这些问题,然后想办法去解决。对你理解封装或者继承以及多态等方面都会有很大的帮助。什么?你不知道什么叫多态?别担心,我们下一章就是“java-面向对象编程-三大特性之多态”。敬请期待。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息