在面向对象中公有字段是不推荐使用了,而改用私有字段和getX(),setX().但一个get,set都提供的属性也是可以任意更改的,这和直接使用公有字段有什么差别?用起来还麻烦.
当然这里的get,set都简单地返回一个私有变量的值,其他情况不成立

解决方案 »

  1.   

    简单的说,当某个似有字段需要变一下,比如变成一个计算结果,这时候修改get方法,可以对这个类的使用者隐藏你的修改,使用者察觉不到你对类进行了修改,他也不需要修改他的代码。
    set就更好理解了,在必要的时候,你可以验证一下类使用者赋值的有效性,这个共有字段很难做到。一句话解释就是要封装。
      

  2.   

    建议lz看一下javaBean的规范以及优缺点的相关资料。你就会明白了
      

  3.   

    http://topic.csdn.net/u/20090927/19/74708b05-cafa-4200-990e-0d2f5fd7f990.html最佳答案别说的那么专业化了,理解都要半天。
    就这么理解吧,面向对象中,想对类的成员变量设置访问一些权限,于是,就将该字段设置为private的,这样别的类就不能访问了,然后在该内定义两个方法,一个专门用于获取,一个用于修改,这样,在你不想让别人乱动该字段的时候,就在该方法内写一些限制条件。
    而为了规范起见(团队开发需要嘛),就根据人家老外的习惯,将方法名设置为set+字段名,get+字段名(名字乱改没问题),既然规范了,那就是别人都叫这名了,于是,有些框架给对象赋值就有方法了,方法名称由get或set开始的又有private变量名的,就找出来调用。hibernate1框架就这样弄得,至于后面的版本是不是这样就不大清楚了。
    JavaBean就是一个JAVA类,既然是JAVA类就不需要什么组件了,这玩意直接深入到虚拟机了的 
      

  4.   

    非常经典的问题。private当然比其他级别的modifier要好,主要是出于encapsulate的考虑。譬如说有个
    private int[] values;
    public void setValues(int[] v){
        this.values=v;
    }有一天你要把values改为
    private List values;
    那只要改setValues的实现:
    public void setValues(int[] v){
        this.values=Arrays.asList(v);
    }无论这个类的客户是调用者还是继承者都不必修改代码。
    但是如果我们一开始把values定义为public int[] values;....那就糟糕了。如果有兴趣看看质量高的代码就会发现这些代码很少有public成员变量,甚至protected也很少。