黑马程序员技术交流社区

标题: 一直不解的问题? [打印本页]

作者: 一直有你    时间: 2013-8-2 08:15
标题: 一直不解的问题?
本帖最后由 杨兴庭 于 2013-8-2 18:40 编辑

       在一个student类中一般都设置属性,age,name和sex等等。这时大多数情况下都会使用到set和get方法,我想问一下大家什么情况下回使用到set和get方法呢?
作者: 米中之玉    时间: 2013-8-2 08:27
封装,是面向对象的四大特性之一。比方说我就是一个类,为了不让别人看到我有什么属性,一般我都把我的成员变量设置为私有,这样就封装起来了。但别人创建了我的对象了,后来又又想改名字或年龄什么的,他摸不到我的成员变量,就不能改,所以我就给他一个set方法。至于get  你懂得。
还有就是,一般静态成员变量(static修饰)和常量(final)用public提供,不用提供get和set方法。
作者: 布易般    时间: 2013-8-2 08:41
本帖最后由 布易般 于 2013-8-2 08:58 编辑

我打一个比方:假如 学生 类中有一个属性是:钱包  。

如果你不把钱包藏好的话,身边所有的人都可以直接翻你的钱包,这样我想你可能会很不爽。
凭什么呀,这是我的钱,你们怎么可以乱动!
于是你把这个钱包藏到自己知道的地方,而且是放在密码箱里,谁也看不到。(private修饰)

这时候有人问,你钱包有多少钱啊?
要是以前他就自己直接翻了,现在不行,因为钱包被你藏起来了,只有你自己知道。
他只好调用你设计的接口问你:
     getXxx()---这个是问你有多少钱的?

     【有人问你多少钱,于是你找到密码箱,输入密码,打开钱包,数一数多少钱,靠,有1万存款!你想不能告诉别人真实数目啊,你又隐瞒了5000,于是告诉对方说:我有5000块钱。
        在以前别人直接翻你钱包,你的隐私根本无法保护。设置成private,一个好处是:你可以很好的保护自己的隐私!
        但凡以后,你不想别人直接来翻你隐私的情况,都可以用private+getXxx(),Java推荐这么做!
     】
     
如果他说:听说你要去黑马学习编程,我决定支持你2万块钱,他不能直接把钱放到你的钱包,因为他不知道你钱包在哪里。只能把钱交给你,然后由你去存钱。
    setXxx(2万人民币) ----这个是把钱交到你的手,至于怎么存钱是你的事,他也无需知道你的钱包在哪里。

*********************************************************************************************
代码如下:
class 学生
{
      private int name;
      private  double 钱包;  //存钱的变量

     //哥哥你到底有多少钱?
      public double  get钱包()
      {
            return 钱包;
        }

      pulic void   set钱包(double 存款)
      {
             学生.钱包 =  学生.钱包+存款;
       }
}

希望这样的表述,对你有帮助!


作者: 单凯    时间: 2013-8-2 10:34
如果你对自己定义的成员私有化,就是加private修饰时,这是这些属性只能你自己看到、自己使用,但是你提供了一个类还要供别的类使用,为了别的类使用那些私有成员,你需要提供一些方法对成员进行操作,就有了set和get,方便对成员进行修改,又可以对成员进行保护(保护的意思就是别的类定义的该类实例不能直接使用你的成员变量)
作者: 耶稣说wō乖    时间: 2013-8-2 11:33
主要用于封装,
毕老师视频里面说了。封装虽然提高了安全性,但是类以外的即使建立了对象也无法直接访问,所以我们需要在封装类里面向外提供一个Set方法来设置值,get方法来获取值。
这样就解决了封装对类以外的对象也无法直接访问的问题了;
具体代码
  1. class person
  2. {
  3.         private int age;
  4.        
  5.         public void setAge(int age)
  6.         {
  7.                 this.age = age;       
  8.         }

  9.         public int getAge()
  10.         {
  11.                 return age;
  12.         }       
  13. }

  14. class personDemo
  15. {
  16.         public static void main(String[] args)
  17.         {
  18.                 person p = new person();
  19.                 p.setAge(10);
  20.                 System.out.println(p.getAge());
  21.         }
  22. }
复制代码

作者: 王靖远    时间: 2013-8-2 11:58
需要获取属性值的时候用get,需要对属性进行设置的时候用set
作者: abian    时间: 2013-8-2 16:12
如果定义成public的话,可以不用定义set get方法,因为它是公开的,外界可以直接访问,但是这违背了面向对象封装的原则,
封装就是将一些属性和方法隐藏起来,这是这些属性只能你自己看到和使用。如果其他的对象要访问该属性并对属性进行操作时,那咋办?你就必须暴漏一个接口供外界访问,添加set和get方法,外界就可以访问和操做该对象了
作者: 诸隆隆    时间: 2013-8-2 16:39
。。。你这么想逻辑就反了。在一个类中设置属性后,你将属性封装,就是用private修饰后,外部看不见,你就无法查询或者使用这些属性,这个时候,你就需要在类里提前设置set、get方法来调用这属性。
作者: 王希军    时间: 2013-8-2 17:00
首先要生成以上所有属性的get和set方法,封装成一个Bean,在你需要为变量赋值的时候,就调用对应属性的setX方法为其赋值。静态变量和final变量不具备set方法。
作者: 夜空闪亮    时间: 2013-8-2 17:18
get和set是为存取类内私有成员变量而设置的方法,当一个私有成员没有必要让外界修改其值的时候就不需要设置set方法,当不想让外界得到该成员的内容的时候就不需要设置get方法,否则就要就要设置set和get方法以便外界来更改和获取该成员的内容.这两个方法不一定要同时出现,根据具体情况而定.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2