本页面更新日期: 2016年07月22日
前言
在前面程序中,经常出现通过某个对象直接访问其成员变量的情况.
这可能引起一些潜在问题,比如将某个 Person 的 age 成员变量直接设为 1000.
这在语法上没有任何问题, 但显然违背了当前的自然规律. 人怎么可能活到 1000岁 - - . (就现在的科学来讲)
Java也考虑到了这种情况, 为你提供了 类和对象的成员变量进行封装的方法,来保护成员变量不被恶意修改.
理解封装
封装(Encapsulation)是面向对象的三大特征之一.(另外两个是继承和多态, 以后会讲到)
它指的是将对象的状态信息隐藏在对应内部.
不允许外部程序直接访问对象内部信息.
而是通过该类所提供的方法来实现对内部信息的操作和访问.封装是面向对象编程语言对客观世界的模拟
在客观世界里, 对象的状态信息都是被隐藏在对象内部.
外界无法直接操作和修改.
就如刚刚说的 Person 对象的 age 变量, 只能随着岁月的流逝, age 才会增加.
通常不能随意修改 Person 对象的 age.
对一个类或对象实现良好的封装, 可以实现以下目的.
- 隐藏类的实现细节.
- 让使用者只能通过事先预定的方法来访问数据, 从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问.
- 可进行数据检查, 从而有利于保证对象信息的完整性.
- 便于修改,提高代码的可维护性.
为了实现良好的封装, 需要从两个方面考虑.
- 将对象的成员变量和实现细节隐藏起来, 不允许外部直接访问.
- 把方法暴露出来, 让方法来控制对这些成员变量进行安全的访问和操作.
因此, 封装实际上有两个方面的含义:
把该隐藏的隐藏起来.
把该暴露的暴露出来.
这两个方面都需要通过使用 Java 提供的访问控制符来实现.
使用访问控制符
Java 提供了 3 个访问控制符.
- private
- protected
- public
它们分别代表了 3 个 访问控制级别.
另外还有一个不加任何访问控制符的访问控制级别.
所以一共 4 个访问控制级别.
Java 的访问控制级别由小到大如下图所示: