您的位置:首页 > 编程语言 > Java开发

面向对象之封装性理解

2015-10-08 15:09 253 查看
引用:

面向对象的特征之一 : 封装与隐藏

问题:当创建了类之后,如果直接使用"对象.属性"的方式来对相应的属性进行赋值的话,可能出现不满足实际情况的意外。我们考虑不让对象直接来调用属性,而是通过"对象.方法"的形式来控制对对象属性的访问。实际情况中,对属性的操作就可以通过方法来实现

解决方法:(封装性的思想)

一:将类的属性私有化(权限访问修饰符)

二:提供公共的getter和setter方法调用来实现修改    (宋红康)

封装这个解释,我一直喜欢用CPU作为例子

CPU把所有的电阻电容门电路等都封装起来,只留出一些管脚(接口)让用户使用,CPU能暴露什么,不能暴露什么,是生产商设计决定的,用户不能直接操作CPU的电阻电容等等,但可以通过給管脚适当的电压来控制电阻电容等,也就是说用户不能直接访问CPU的属性,但是可以通过方法修改CPU的属性的值
同样的一个类也是把属性算法(逻辑处理)封装起来,只留必要的方法(接口)让用户使用,一个类该暴露什么,不该暴露什么,由类的设计者根据需求设计决定的。private属性用户不能直接访问,如果设计者提供相应的接口方法,那么用户可以通过该接口方法访问。

LZ的疑惑在于通过方法能修改属性和直接修改属性的区别,直接修改相当于不经过门电路直接给CPU的电阻电容等元件输个电压,这样这个电压(电流)是否超载不能有效保证,元件就有可能被烧坏,所以提供相应的方法访问属性,可以在方法中做相应的控制。同样的,一个类,不直接修改属性而通过方法来修改,可以在方法里做相应的处理避免用户输入的一些非法数据而造成系统故障。只不过对于POJO类来说,因为类本身只是作为数据的载体,并不带有逻辑处理,所以一般的set方法就是简单的给属性赋值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息