为什么尽量不公开类字段呢?可以考虑一下,作为“圆”这个类,除了直接用半径定义之外,其实还可以用周长和面积来定义,反求半径,当我们写出这样两个构造函数的时候(现在不需要这样的构造函数不等于将来永远不需要),就反过来在这两个函数中设定半径,这样若你公开了半径可被外部任意读写,就可能在设定了周长的前提下把半径改了导致与原先的周长不符。无论如何,一个具体的圆对象一旦创建,它就是稳定的,半径不需要公开(宁可写一个公开的返回半径方法获取私有变量的值也不要随意公开类内字段),改变半径的圆就另外创建一个圆对象实例,如果真要改当前对象的参数,就用公开的设置半径方法,而把是在外部直接读写对象字段——这是为了保持类行为和对外接口不变而应该遵守的原则,在内部怎么修改代码都不至于影响使用类的程序员的感觉。
举个例子,我上面的代码,带参构造函数就是需要修改的,因为它没有判断非法的半径值(比如负数),而要追加这个需求,不需要在min()函数作判断,交给构造函数就可以了,否则要在外部调用处增加大量的判断代码,那是重复且无趣的劳动,可维护性也差,逻辑不清晰。