就是java封装性的问题,我们一般定义私有变量,在定义get,set方法是为了外部不能改变这个变量,那这个外部相当于什么呢,使用户吗?用户可以看到代码吗?显然不能?那为什么定义私有变量,定义公有不是一样吗?在线等答案

解决方案 »

  1.   

    class A{ 
    ∶         private int a; 
    ∶         public int get_a(){ 
    ∶                 return a; 
    ∶         } 
    ∶         public void set_a(int a_value){ 
    ∶                 a = a_value; 
    ∶         } 
    ∶ } 
    ∶ 为什么不直接写成: 
    ∶ class A{ 
    ∶         public int a; 
    ∶ } 
    ∶ 外面要读写a的时候直接读写就可以了,那不更方便么? 
    ∶ 望大虾指点,谢了。 
            如果你的代码需要改成,读取a的时候从另一个变量计算过来, 
     
    保存a的时候计算以后保存到另一个变量去。如果你写成get/set的方式, 
     
    只要改这两个函数就可以了,其他所有涉及到a的地方都不用改,因而 
     
    也不担心会出错。 
     
            你有100个这样的a,可能最后碰到需要修改的情况只有5个或者更少, 
     
    但是,就这5个需要修改的就可以把你折腾死,这就是封装的好处。 
      

  2.   

    书上说,实现类的封装可以实现:   
      1、隐藏类的实现细节。     
        
      2、让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作。   
        
      3、便于修改,增强代码的可维护性。  
      对于3,我觉得就是面向对象的一个重要特点,开发程序的时候,对于一些常用的方法或函数或者一些反复出现的常量变量等,都可以把他放到一个类里封装起来,这样,如果需要修改这些中的一个的话,就可以很方便了,不用去检查所有出现这些变量或函数及方法的地方了。便于维护。。   
     
        
      4、可进行数据检查   
      对于4:以便对于需要用户输入数据的程序JAVA中一般会提供set和get方法来设置和读取数据,这样就可以在set方法中先检查数据是否合法,而不是让用户直接来操作变量
      

  3.   

    这是前人宝贵经验的积累,接触JAVA时间长了,你自然就明白了。现在要做的就如jk88811(你的就是我的,我的还是我的~!) 说的,遵守规则。^_^
      

  4.   

    外部就是outside current class。为什么这样呢?这个是OOP的概念,封装性得好处不是几句话说得清楚地,还是读书吧,以后用得多了就明白了。举个简单的例子吧,比如说,你写了一个Cat的class,公司的另一个团队用到了你的这个class。
    //Version 1.0
    class Cat {
      public double weight;  // other methods
    }对一个Cat来说,weight应该是一个大于零的数。如果你使用了一个public variable,你就失去了对这个属性的保护。如果另一个团队在使用过程中,出现了错误,在找到错误之前,他们可能会认为是你写错了,那你可就麻烦啦……//Version 2.0
    class Cat {
      private double weight;  public double getWeight()
      {
        return this.weight;
      }  public void setWeight(double wt) {
        //check pre-condition
        if (wt > 0)
          this.weight = wt;
      }  // other methods
    }这样的话,在weight这个地方,你自己就保护了自己,不会出错了。这只是个简单的例子,在使用过程中,应该会有更深的理解。
      

  5.   

    在weight这个地方,你自己就保护了自己,不会出错了。   什么叫不会出错了,难道上面那个会出错?  还有,便于维护能举个例子吗?
      

  6.   

    不会出错,就是说你定义的Cat不会有个小于零的weight呀。
      

  7.   

    便于维护嘛,比如说:有一天,你打算改weight这个变量的名字,改称catWeight。当然啦,这只是个例子,还有好多别的好例子。在version 1里面,你只能让另外的团队,在每一个用到你的weight的地方,都改成catWeight。这可不是一时半会儿的事……他们铁定骂你呢……在version 2里面,你只要改一下自己的getWeight()和setWeight()就行了。只要他们用的还是这个getWeight()和setWeight()就不用改什么了。
      

  8.   

    仔细看了楼主的话,好象大体懂了其意思,试解读如下:
    “就是java封装性的问题,我们一般在类里面定义私有变量,再通过定义比如get,set等公有方法来访问这些私有变量,目的是为了不能让外部直接改变这个变量,而必须都要通过get,set公有方法才能改变它(的值)。那这个外部相当于什么呢,是用户吗?用户可以看到代码吗?显然是可以的(注:源代码可以,编译后代码显然谁都不能),那为什么还要定义私有变量,定义公有不是一样吗?在线等答案。”
    ---试解答:
       外部是指类之外的代码,不是指编码的那个人,是那个人编的码。
       语言的语法实际也不过是一种游戏规则,比如java语言所规定的private私有语句和public公有语句等,就是它有关访问方面的游戏规则,其意思就是告诉你(所编的类之外的代码)说,别试图直接去改变类里面的私有变量,否则我就不给你通过编译并出示错误警告。也就是说当你在一个名为plmm类里定义了一个私有变量saily_girl,并定义了一个saily_girl()公有方法才能访问它,那么当你想用类之外的代码来访问私有变量saily_girl时就必须调用saily_girl(),如果你直接用诸如int saily_girl=258,那编译器是不会答应的,因为你违反了它的规则。
        而所谓便于维护,是指编程员对源程序的维护。
      

  9.   

    使用set和get方法有两个好处:
    1。以规范的格式,方便外部程序的调用(如web容器)
    2。通过对set和get方法的prtvate/protect/public设置,可以限制只能取或只能存的变量,比如一个变量a,要只能读取,那就把get设为public,其他都private
      

  10.   

    这绝不是白痴问题
    想学好一门语言
    绝对要细致
    我觉得你写代码的时间还是少
    你可以来回改动它们
    反复实验 你就会知道 public和static的好处了