类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变量操作权限效果是一样的阿,那区别在哪呢
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变量操作权限效果是一样的阿,那区别在哪呢
一个是直接访问类成员,myA.aa = 22;
一个是间接访问,myB.setBb(33);私有成员只能间接访问...
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;
}
}
但是如果是B类,你可以在方法里做个处理,最好setXxx()方法能返回个布尔值public boolean setBb(num){
if(num < 0 || num > 150){
return false;
}
this.bb = num;
return true;
}
其中重要的思想之一就是encapsulation~封装通俗的说就是隐藏!!A的弊病:
1.你现在A类的属性完全暴露~~不安全!
2.你要对赋值语句进行更加详细的封装的话和困难~
3。后期不好维护!