我们在上一章中谈到了面向对象编程的三大特性之一的继承。并且说到在继承中,父类其实是从子类中抽象出来的,而在这里所说的抽象,就可以理解为数据封装的一种表达方式。而准确来说,所谓的封装,就是在人为对客观事物进行抽象之后,将其聚合在一个类内,并且这个类可以把自己的属性和方法只让可信的类(继承)或者对象(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-面向对象编程-三大特性之多态”。敬请期待。

java-面向对象编程-三大特性之封装相关推荐

  1. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  2. java面向对象:三大特性:封装,继承,多态

    -----------------------------------面向对象:三大特性:封装,继承,多态 ----------------------------------- 1.什么是类?什么是 ...

  3. Python面向对象编程三大特性之封装

    封装 封装 封装的级别 获取对象的所有成员 code:_5packaging.py # ******************************************************** ...

  4. java面向对象特性_java面向对象编程三大特性

    一说到java面向对象编程就想到面向对象的三大特性,封装,继承和多态,下面我们来具体分析以下这三大特性在编程中是如何具体体现的. 封装 将类的属性和具体实现细节隐藏,只提供相关的接口和方法来对隐藏信息 ...

  5. Python - 面向对象编程 - 三大特性之继承

    继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的 class 类就叫子类(Subclass) 被继承的类一般称为父 ...

  6. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  7. 面向对象的三大特性:封装、继承、多态

    面向对象的三大特性 面向对象的三大特性:封装.继承.多态 封装 封装,成员变量的封装,保证了数据的安全性.封装的好处:过滤了不合理的值.屏蔽内部的赋值过程.让外界不必关注内部的细节 Set方法 1.  ...

  8. 面向对象之三大特性:继承,封装,多态

    python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分 ...

  9. Java基础篇——三大特性(封装)

    Java三大特性我会用自己理解给大家一一介绍,有兴趣的可以关注一下,可以让你学到一些基础但是又非常实用的东西,基本上都是自己的一些理解和实践结果,对于新手来说可以避免走弯路(后期会出Java的其他重要 ...

最新文章

  1. BZOJ 2140 稳定婚姻(强联通分量判环)【BZOJ修复工程】
  2. 深入struts2.0(七)--ActionInvocation接口以及3DefaultActionInvocation类
  3. springboot+vue用websocket消息推送和监听端口
  4. c++11-Varadic Templates右值引用lamada
  5. eclipse新发现功能之dos和terminal(ssh连接)
  6. P3466-[POI2008]KLO-Building blocks【Treap】
  7. deMeer5_Attacker
  8. 【转载保存】webCollector使用教程
  9. 发布!天池布匹疵点检测大赛解决方案与Baseline(acc:85%左右,mAP:52%左右)
  10. linux服务启动redis自动启动不了,linux开机启动redis、nginx等服务
  11. linux link path walk,python之os.walk()与os.path.walk()
  12. 深度学习:bert embedding用法详解
  13. linux目录分配独立磁盘空间,Linux 分配/home的磁盘空间给根目录
  14. 工控领域组态软件开发感触
  15. forge不能用java打开_minecraft萌新官方启动器、forge、java常见问题
  16. 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明
  17. Twd轉php_5 TWD to PHP Currency Converter - 新台币 菲律宾比索 汇率兑换
  18. Dorado7 notify非alert 输入框prompt confirm layer dialoger,layer.msg,toast效果,几秒关闭layer.load layer.open
  19. 【oracle】查询===Oracle数据库 子查询(嵌套查询)简单例子
  20. 彩信数据库mmssms.db

热门文章

  1. 称重管理系统服务器不通,如何解决在无人值守称重管理系统的漏洞
  2. 使迅雷超速的六个超级技巧
  3. MySQL的安装 和 navicat for mysql 安装
  4. uboot启动第二阶段
  5. Git 提交代码单词
  6. php框架实现原理,Ylmf-PHP框架基本原理
  7. Redis 运维 三
  8. 第六周、第七周-Web前端
  9. 全志R16 checklist(PCB部分)
  10. kkcms前台sql注入漏洞复现