java封装实现的是隐藏信息,也就是说控制访问的权限,一般都采用getter()和setter()方法来实现属性的读取和修改,可是这样有什么具体的区别和优势呢?

解决方案 »

  1.   

    恩,属性都是private,用getXXX()和setXXX()当然有优势啊,如果不想让人家修改属性,setXXX()可以不写--只读。而外部又不可以访问私有属性,这就是封装的优势吧,我是这么认为的。
      

  2.   

    java封装有利于提高系统的集成度。否则很多实现过于分散,对日后维护也很难。至于 getter和setter方法,除了1#说的之外,试想一下,如果你想调查一个对象的某个属性被改变了,
    而这个属性是public的,那么你怎么好确定它是在哪里被改变的呢,
    但你把它定义成private的,那么,你就可以查看所有调用过它的setter方法的地方就可以了。
    不至于像大海捞针一样。
      

  3.   

    如查把属性声明成public,那就完全公开了,外部可以没有任何限制的读写了属性,这个对安全性是大问题,但如果声明成private,你就可以在getter和setter进行相应的权限、同步之类的控制,甚至你可以让它对外只读(只保留getter,去掉setter),这样内部是可以读/写,这就实现了信息隐藏
      

  4.   

    ----将属性定义为private后怎样查看所有调用过他的setter方法呢?
      

  5.   

    使用方便,如下:// 用户类
    class User {
        // 用户类的成员变量(分别对应User表中的属性)
        private String name;
        private String password;
        private String email;    public String getName() {
            return name;
        }    public void setName(String name) {
            this.name = name;
        }    // ... 其他变量也定义Getter()和Setter()方法。
    }
    // 用户数据控制类
    class UserTest {
        
        public static void main(String[] args) {
            // 定义一个用户对象,且初始化
             User u = new User();
            u.setName("zhangsan");
            u.setPassword("123456");
            u.setEmail("[email protected]");
            // 直接传User类的对象就可以了。
             // 中间经过的类不用关心User类每个属性。
             // 调用其他类,传递这个类
             UserDB ud = new UserDB();
             ud.save();
        }
    }
    // 负责保存到数据库的类。
    class UserDB {
        
        // 保存到数据库。
        public void save(User u) {
            // 这里就可以得到User类里的所有要保存的数据了。
             // 保存
        }
    }取的时候就更简单了,取出来的时候包装成一个User对象。
    那么,想要什么取什么。
      

  6.   


    public class User{
       private String name = null;
       public void setName(String n){
          name = n;
       }
       public String getName(){
          return name;
       }
    }
    public class User1{
       public String name = null;
    }
    这两个类,前一个类的name属性为private的,
    第二是public的。如果你发现一个问题,可能是因为 这个类的name属性被程序错误的改变了而引起的。显然,用第一种实现,更容易发现问题,毕竟你可以把问题集中到一点:setName方法的调用处。而第二种就麻烦了。
      

  7.   

    使用setter和getter方法,也就是所谓的"javabean",还有一个很重要的东西,就是“反射调用”,反射调用在spring、hibernate和struts中运用很广。
      

  8.   

    我的理解是,其实就是按照规定的方式进行存取,如果设置为public,那就可以对这个对象进行任意的操作,如果设置为private的话就只能按照setter和getter中规定的方式对某一属性进行操作,不至于失控!