更多精彩,请关注我的微博:
封装是 Java 语言的三大特征之一。
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
正文
封装的优点
- 良好的封装能够减少耦合;
- 类内部的结构可以自由修改;
- 可以对成员变量进行更精确的控制;
- 隐藏信息,实现细节;
封装的步骤
1.属性私有化:修改属性的可见性来限制对属性的访问(一般限制为 private ),例如:
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2. 提供公有的访问方法:对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
采用 this 关键字是为了解决实例变量(private String name)和 局部变量 (setName(String name)中的name变量)之间发生的同名的冲突。
实例讲解
根据上面的代码,让我们来写一个java封装类的例子:
以上代码编译运行结果如下:
Name : Jimmy ; Age : 1000 岁
程序能编译通过,而且可以正常运行,但是结果显然违反了事实逻辑规则(人类的年龄怎么可以到1000岁,至少目前不能)。
为什么会发生这样的事情呢?原因就是EncapTest类没有封装好自己的数据,导致外部类没有任何限制的滥用其成员属性,从而进一步导致其状态数据违反了逻辑规则,而这一切的发生对EncapTest类来说是不可避免的。
我们明白,经过”封装”以后的EncapTest类解决了保护自身成员属性不被随便使用的问题,而对于出现违反业务逻辑的情况呢?答案是只要在set()方法上稍作做验证,就能解决问题了。
小结
- 封装保证了程序的内部结构的内聚性,提高了安全性,只要我们的方法写的足够完善就不会出现违反逻辑的情况出现;
- “封装”给了我们一个有效的规避途径,而不是去规定客户的调用形式,这在源头上杜绝了违反业务逻辑的情况;
- 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性;
- 基础知识要经常回顾,还是有嚼劲的。