通过get/set方法看封装的好处

2017-09-11  本文已影响0人  憩在河岸上的鱼丶

刚开始学c++、java时候一直非常纳闷为什么要把类的属性设为private,修改这些属性通过getset方法,当时的解释是安全。core Java对此的解释是三个好处:

1.安全
比如People类的属性name可以设置为只读域,即只有get方法,没有set方法,当在构造方法中设置完毕,就没有任何一个办法可以对它进行修改,这样来确保name域不会受到外界的破坏。

2.方便调试
People类的属性age虽然不是只读域,但是只能通过setAge (int age)方法进行修改,一旦这个属性值出现了问题,只要调试这个方法就可以了。如果age属性是public修饰,破坏这个属性值的捣乱者则可能出现在任何地方。

3.可以轻易改变内部实现
如果将存储名字的属性改为

String firstName;
String lastName;

那么getName方法可以改为返回
firstName+" "+lastName,只需要修改getName()方法的内部实现,不会影响到其他代码。

4.可以执行错误检查
比如setAge()方法我们可以在设置之前判断参数age是否大于0。

在《码出高效》中对于封装的好处是这么描述的:封装是由俭入奢易,由奢入俭难。属性值的访问与修改需要使用相应的getter/setter方法,而不是对public的属性进行读取和修改。
如果有一天,类的提供方想在修改属性的setter方法上进行鉴权控制,日志记录,这是在直接访问属性的情形中无法做到的。若是将已经公开的属性和行为直接暴力修改为private,则依赖模块都会编译出错。所以,在不知道什么样的访问控制权限合适的时候,优先推荐使用private控制级别

上一篇 下一篇

猜你喜欢

热点阅读