类A的属性aa设置为public
public class A{
    public int aa;
}
类B的属性bb设置为private
public class B{
    private int bb;
    public int getBb(){
        return bb;    
    }
    public void setBb(num){
        this.bb = num;
    }
}
客户端修改类A的新实例的属性时:
A myA = new A();
myA.aa = 22;
客户端修改类B的新实例的属性时:
B myB = new B();
myB.setBb(33);
感觉客户端对类A和B变量操作权限效果是一样的阿,那区别在哪呢

解决方案 »

  1.   

    你这个例子,效果是一样的,但是方式不一样:
    一个是直接访问类成员,myA.aa = 22;
    一个是间接访问,myB.setBb(33);私有成员只能间接访问...
      

  2.   


    public class B{//这样的话不一样了吧
        private int bb;//bb作当前操作数组的下标
         private int[] cc;
        public int getBb(){
            return bb;    
        }
        public void setBb(num){
            this.bb = num;
            if(bb<0)bb=0;
        }
    }
      

  3.   

    如果get set方法全有的话就是一样的但是有的时候程序员不想让客户端修改这个域时、或者只允许客户端设值而不允许得到值时、或者根本不让修改和获取时。就不提供get set方法,或只提供其中之一,就不一样了。
      

  4.   

    假设你两个类里的aa和bb,都是表示一个人的年龄。如果使用A类,有可能会给aa赋负值,或者超出正常的数值。
    但是如果是B类,你可以在方法里做个处理,最好setXxx()方法能返回个布尔值public boolean setBb(num){
            if(num < 0 || num > 150){
                 return false;
            }
            this.bb = num;
            return true;
       }
      

  5.   

    要深刻理解OOP的思想~  
    其中重要的思想之一就是encapsulation~封装通俗的说就是隐藏!!A的弊病:
    1.你现在A类的属性完全暴露~~不安全!
    2.你要对赋值语句进行更加详细的封装的话和困难~
    3。后期不好维护!