面向对象有三大特性,“封装”,“继承”,“多态”。“封装”是其中的首要特性。
封装的思想
在讨论封装之前,先讨论一下编程中编写程序的思维方式,最常见的就是面向过程和面向对象。简单来说,就是:
- 面向过程,思考"该怎么做"。
- 面向对象,第一层思考"该让谁来做",第二层再思考"谁该怎么做"。
所以,从表象来看,面向对象就是对面向过程的思维的升级,就是“对面向过程”的封装。这样就可以用来解决更复杂的问题。把复杂问题分层分块解决。
分层解决问题的思维要借用世界上首位计算机博士David John Wheeler的一句名言: Any problem in computer science can be solved with another layer of indirection. (计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决) 当然也不要忘记后半句:But that usually will create another problem.
封装的概念
封装就是指隐藏对象的属性和实现细节,仅仅对外提供公共方法去访问它。
- 好处
- 将变化隔离,任何实现细节所做的更改都不会影响使用者。
- 使用简单,使用者只使用公开的那部分方法,复杂的内部逻辑不需要知道。
- 提高复用性,各自做专业分工范围内的事,使用者再组装解决更复杂的事。
- 提高安全性,很容易通过控制访问权限隐藏保密信息;不会意外修改数据。
- 原则
- 将不需要对外提供的内容隐藏起来。
- 把属性隐藏,提供公共方法对其访问。
Java各层次的封装
- 属性和方法的封装,通过属性和方法的可见性来限制对属性的访问和限制内部逻辑的调用。
- 类的封装,即将属性和方法封装到类里面,通过添加访问修饰符来限制访问权限,以达到信息隐藏的目的。
- 包级别的封装,把类组成一个单元(模块),便于管理和维护。
- 程序包(Jar)级别的封装,将基础的通用的业务封装到一个Jar包中,其他项目加入依赖(Maven)即可使用其公开API。
Java的访问控制
Java通过访问修饰符的关键字来支持在类和包级别的封装。
- public(公开的):表示开放此属性或方法,即对外提供的访问入口。
- private(私有的):表示隐藏的信息,只能被本类访问。
还有另外两个,protected(受保护的)和默认,用在包级别的封装。
![7665e2274ccc5e3e493d89cb8dad4cb1.png](https://i-blog.csdnimg.cn/blog_migrate/de80ab010d44c4c6173af90e351110a0.jpeg)