原因有三,可以赋予用户访问数据的一致性,可以细微划分访问控制,有良好的封装性。
- 一致性
如果成员变量设置成public,由于对外暴露的接口也是public的,所以访问成员变量或者成员函数的时候,需要记住哪个需要加括号,哪个不需要加。
- 划分访问控制
如果把成员变量设置为public的,用户可以对任何成员变量进行读写,如果设置成private的,就可以设置成只读模式、只写模式或者读写模式。
- 良好的封装性
如果你通过函数访问成员变量,日后可以改以某个计算替换成员变量,而class客户一点感知都没有,class内部已经实现了变化。把成员变量封装到类的内部时,当对它们的操作发生了变化,只需要修改类内的操作函数即可,如果成员变量设置成public的,发生变化时,则需要修改类外部的逻辑,这违反了面向对象的设计原则。