条款22:将成员变量声明为private

为什么要将成员变量声明为private?

角度一:语法一致性

将所有成员变量都声明private,剩下的成员就是成员函数了。那么外部访问时都得要带括号,因为只可以访问成员函数。

角度二:使用函数可以让你对成员变量的处理有更精确的控制(访问控制角度)。

如果令成员变量为public,每个人都可以读写它,但是如果你以函数取得或设定其值,你就可以实现出“不可访问”、“只读访问”、“读写访问”。

角度三:封装性

  • 将成员变量隐藏在函数接口的背后,可以为“所有可能的实现” 提供弹性 。这使得成员变量被读、被写时,可以轻松的通知其他对象、可以验证class的约束条件以及函数的前提和事后状态、可以在多线程中执行同步控制…等等。

  • 可以确保calss的约束条件得以维护

  • 保留日后变更实现的权利(public意味着不封装,不封装几乎意味着不能变更实现,因为它会破坏大量的客户代码。尤其是对被大量使用的classes 而言更是如此。需要重新写客户代码,重新测试、重新编写文档、从新编译)

protected 和public其实是一样的,无论从一致性、访问控制、封装性三点,和public是一样的。protected虽然提供了一点封装性,但是不能够有上述保证,因此封装性和public也没啥区别。实际上,封装性只有两种,private (提供封装),和其它(public或者protected等,不提供封装).

原文地址:https://www.cnblogs.com/lasnitch/p/12764173.html