封装这个解释,我一直喜欢用CPU作为例子
CPU把所有的电阻电容门电路等都封装起来,只留出一些管脚(接口)让用户使用,CPU能暴露什么,不能暴露什么,是生产商设计决定的,用户不能直接操作CPU的电阻电容等等,但可以通过給管脚适当的电压来控制电阻电容等,也就是说用户不能直接访问CPU的属性,但是可以通过方法修改CPU的属性的值
同样的一个类也是把属性算法(逻辑处理)封装起来,只留必要的方法(接口)让用户使用,一个类该暴露什么,不该暴露什么,由类的设计者根据需求设计决定的。private属性用户不能直接访问,如果设计者提供相应的接口方法,那么用户可以通过该接口方法访问。
LZ的疑惑在于通过方法能修改属性和直接修改属性的区别,直接修改相当于不经过门电路直接给CPU的电阻电容等元件输个电压,这样这个电压(电流)是否超载不能有效保证,元件就有可能被烧坏,所以提供相应的方法访问属性,可以在方法中做相应的控制。同样的,一个类,不直接修改属性而通过方法来修改,可以在方法里做相应的处理避免用户输入的一些非法数据而造成系统故障。只不过对于POJO类来说,因为类本身只是作为数据的载体,并不带有逻辑处理,所以一般的set方法就是简单的给属性赋值。
网友评论