以前面向对象没学好....
最近老是在想,既然要设为private为什么还要写个setter来改变它的值呢?
为什么不直接把它直接设成public倒省事?
呵呵,谢啦

解决方案 »

  1.   

    用setter来改变数据成员的值时,操作必须由这个对象自己来触发
    用public来改变数据成员的值时,操作可以由任何对象来触发这是面向对象的封装,总之就是自己的数据成员,只对自己可见,也只有自己才能改变其值,慢慢体会吧!
      

  2.   

    为了修改访问本类中的private修饰的成员变量。
      

  3.   

    不对,用个以后你能学到的,MVV 你要从form里面或者可持久化类里面取出来值和你的界面的值对比 你界面的值肯定是改动过的 所以就是要用  
       
         form.setusername(可持久化对象.getusername);
      

  4.   

    对象的封装性,
    private的只有对象自己才可以访问,其他任何对象不行,包括它的子类和父类。安全性高,其他对象只能通过它的public方法,set,get来获取或设置原对象的private属性。
    public其他对象可以访问,安全性就不高了。
      

  5.   

    很简单的道理,别人向你借东西,是你自己去拿给他,还是他自己随便就去拿呢?用setter主要是体现类的封装性,保证了类的安全性
      

  6.   

    将成员变量用 private 修饰 
    实现了数据成员的隐藏  也就是面向对象中的简单的封装
    其他的类不可以随便的修改 private 的值 达到了保护数据完整性的需要 也就增加了代码的可维护性
      

  7.   

    get和set相对,,
    一般在一起用
      

  8.   

    其实怎么说呢,如果你get 和 set 一起用,那个人觉得就没啥意义了。有的时候,定义的变量,只允许读,不允许写,那么就写一个get就可以了,呵呵。
      

  9.   

    一般set都定义为私有,意思就是只有自己才有权利去修改,而get多为public,含义就在于,获取,得到的方法可以是公共的
      

  10.   

    开始的时候:
    private int a;public void setA(int a) {
        this.a = a;
    }万一有哪一天,要记录A的改变,那么只需要改为:
    public void setA(int a) {
        logBefore();
        this.a = a;
        logAfter();
    }所有用到setA的地方都不需要改了!!!但试想一下用public int a;的情况?
      

  11.   

    即使是private也没什么用,有了反射一切皆有可能.
      

  12.   

    为什么大家对“封装”这么在乎,其实就是个概念而已。
    最主要的增加getter setter方法的原因有两点:
    1 统一规范,外界大量使用了apache的commonbean控件,都是直接调用get方法获取属性的,set方法设置的。
    2 便于修改,必要时可以在get的时候进行trim操作等等,将来修改容易。也可以在get set的时候记记日志之类。
      

  13.   

    其实如果你不想别人来修改你的值,那么可以只用geter不用seter 
    这样的话更加安全
      

  14.   

    JavaBean中就是这样要求的
    如果你不这样设也可以,但不符合JavaBean
    在很多要用到JavaBean的地方,你的类就不能用
    也就是说做不到通用化
      

  15.   

    个人感觉有两点:
    1、可以控制读写权限,比如只写getter不写setter,可以做到对外只读,而public不可以。
    2、便于扩展,当变量被修改时,如果用setter,你可以在变量被修改的同时做一些操作,而如果用public就无法做到。
      

  16.   

    不仅仅是变量的原因,更多的是一种规范,比如有个属性name,有些开源框架会自动给你调setName方法或getName方法。。
      

  17.   

    简单的说就是为了面向对象的封装性更好。这是一套javaBean的规范  当你在进行j2ee开发的时候就可以感觉到当用到struts时,他的Form类就是要遵守javaBean规范。只有setter与getter方法才可以把页面的值传给后天进行处理
      

  18.   

    get,set方法里面是可以封装其他操作的比如
    void setA(int a)
    {
      if(a>10)this.a=10;
      else this.a=a;
    }
      

  19.   

    利用反射机制,一样可以修改private 的属性
      

  20.   

    这个get set确实很不爽,C#就把它改了