在面向对象的编程过程中, 为什么需要封装 ( Encapsulation) 呢? 因为对象也有隐私, 对
象的隐私就是对象内部的实现细节. 要想对象保持良好的形象, 就要保护好对象隐私, 所以
的封装, 其实就是保护对象隐私. 当然, 没有人能完全隐藏自己的隐私, 比如, 现实生
活中去转户口时, 不得不透露自己的家庭信息和健康状况. 另外, 在不同的场合所透露隐
私的数量也不一样, 朋友和家人可能会知道你更多的隐私, 同事次之, 其他人则知道得更
少面向对象的编程也考虑了这些实际的情况, 所以像 Java 之类的编程语言有 public
mate, protected, friend 等关键字, 以适用于不同的情况.
封装可以隔离变化. 对象内部是非常容易变化的. 比如: 电脑在不断升级, 机箱还是方
的, 但里面装的 CPU 和内存已是今非昔比了.
变化是不可避免的, 但变化所影响的范围是可以控制的, 不管 CPU 怎么变, 它不应该
影响用户使用的方式. 封装是隔离变化的好办法, 用机箱把 CPU 和内存等封装起来, 对外
只提供一些标准的接口, 如 USB 接口, 网线接口和显示器接口等, 只要这些接口不变, 不
管内部怎么变化, 也不会影响用户的使用方式.
封装还可以提高易用性. 封装后只暴露最少的信息给用户, 对外接口清晰, 使用更方
便, 更具用户友好性. 试想, 如果普通用户都要知道机箱内部各种芯片和跳线是如何布局
是多么恐怖的事情, 很多人到现在为止甚至还搞不清楚硬盘的跳线设置幸好也没有必要知道
封装有两层含义, 其一是隐藏内部行为, 即隐藏内部方法, 调用者只能看到对外提供的公共方法
其二是隐藏内部信息, 即隐藏内部数据成员. 为了方便读者对封装有较清晰
认识, 图 56 很形象地表达了封装的含义(作者修改来自( Data Structures& Algorithms in
a)- 书中的图片)
image.PNG
为了实现数据的封装, 提高数据的安全性, 一般建议把类的属性声明为私有的, 把类
方法声明为公共的. 这样, 对象能够直接调用类中定义的所有方法, 当对象想要修改或
得到自己的属性的时候, 就必须要调用已定义好的专用的方法才能实现. 在考虑封装的时
候, 建议读者遵守 "对象调方法, 方法改属性" 的要求
对于面向对象编程而言, 需要掌握如下几点
(1)抽象就是忽略一个主题中与当前目标无关的那些方面, 以便更充分地注意与
目标有关的方面, 抽象并不打算了解全部问题, 而只是选择其中的重要的一部分
(2)封装就是将属性和方法一起包装到一个程序单元中, 并隐藏方法的实现过程. 这
个程序单元以类的形式实现.
(3)只关注类的属性和方法就称为数据抽象.
封装一个类, 就是根据具体的应用从同一类型对象中抽象出相关的属性(成员变量和方
法. 例如, 封装 "人" 这个类, 将张三, 李四, 王五, 布兰尼, 朱丽叶等具体对象的重要
信息抽出来, 即姓名, 体重, 身高, 说话, 行走等, 只要是有这些特征的高级动物, 就归
为一类, 称为人类
来源: http://www.jianshu.com/p/6ba6d13f4201