本条款的核心内容就是告诉你,为什么要把成员变量声明为private,并且让你服服帖帖的认同这个观点!
理由1:从语法一致性来讲
如果成员变量不是public的话,客户访问成员变量的唯一途径就是通过public的成员函数,如果public内的每个东西都是函数的话,客户在访问class成员的时候只需要记住后面加()就可以了,不需要记住其他的一些东西,因为你访问的都是函数,这是不是很方便
理由2:精准控制来讲
使用函数可以让你对于成员函数的处理更加的精准的控制。如果你让成员变量为public是不是每个人都可以访问成员变量,并且读写他的值,如果你以函数的形式来访问,自己就可以规定他的权限,比如说“不准访问”,“只读访问”,“读写访问”,这些都可以你自己根据你函数的设定来实现。细致的划分成员变量的访问控制(比如谁来写,谁来读)很有必要,因为成员函数应该被隐藏起来
理由3:封装来讲
①如果你使用函数访问成员变量的话,在以后如果更改某个方法替换这个成员变量,客户是完全不知道class内部已经起了变化的。可以给你更改代码和在内部做修改提供了更大的弹性。
②public意味着不封装,而几乎可以说,不封装意味着不改变,怎么理解呢?因为public成员变量可以被外界的客户所访问和使用,一旦被客户开始使用,我们如果修改了public的成员变量以后那么多少的使用到它的客户代码都会被破坏,这是一个不可预估的问题。会造成太多的代码重写,重新测试,重新编写文档,重新编译。所以public成员变量完全没有封装性,protected也是一样的,使用到他的Dervice class都会被破坏,造成的后果也基本是一样的。
所以总的来说访问只有两种权限,private(提供封装的)和其他(不提供封装的)。