日期:2014-05-20  浏览次数:20657 次

问大家一个关于private和public的问题?
关于private和public的使用范围,和他们的类型什么的我都懂。
我想问的是,一般的bean里面的成员变量都定义为private,然后通过get、set对这个变量赋值和取值。
那为什么我不能把这个变量定义为public呢?定位为public也是可以get、set的不是吗?
有人说,这样就可以直接用实例化的类名+.直接改这个变量的值了,不安全,我还是不太理解。
比如说:
public class Person {
        private  int id ;
private  String name ;
private  int age ;
public String school ;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
        public void setId(int id) {
this.id= id;
}
         public void getId(int id) {
return id;
}

}
我要找数据库Person表里面的一个person 。我必须先通过setId(),才能找到对应的person,这样的话,我其他的成员变量用public 和 private 就没区别了啊,必须先实例化一个对象,找到这个对象,才能改变这个对象的属性。这样为什么还存在安全性问题呢?
在我的理解范围内get、set只是方便变量的取值和赋值,改成public一样可以用,我不理解为什么必须要用private修饰成员变量呢?
安全性在哪,谁给我举个列子。

------解决方案--------------------
可以让bean属性的取值不超出设计时的预期。比如设置一个人的年龄超过1000是不合理的.

public void setAge(int age){ 
     this.age=age%100;
}

------解决方案--------------------
封装,不能直接访问属性。
------解决方案--------------------
http://blog.csdn.net/zhaoming262350/article/details/7907749