黑马程序员技术交流社区

标题: 请帮忙解答封装的问题 [打印本页]

作者: 完美恋爱    时间: 2013-11-16 17:10
标题: 请帮忙解答封装的问题
本帖最后由 完美恋爱 于 2013-11-16 18:59 编辑

public  void   setA(int  a)
{
            aaa   =   a;
}
public  int   getA()
{
          return  aaa;
}


1.请问这里的return   aaa是返回给谁的?
2.如果是返回给调用者的话不是应该调用getA方法而不是调用setA方法啊,才能返回给调用者吗?


作者: Weix1992    时间: 2013-11-16 17:20
本帖最后由 Weix1992 于 2013-11-16 17:26 编辑

楼主第二句话我没听懂,能再说清晰一点吗?

比如 Test t = new Test();

  t.get**() 此时你返回的是一个int 型的数据,但是你仅仅这么写,返回的值就没有给任何地方。

int a = t.get**();  这样把返回的值给了a 不知道LZ是不是问的这个意思。
作者: 冷月    时间: 2013-11-16 17:22
肯定是返回给调用者的,get()和set()方法只是变量的两种访问方式
作者: 一步一脚印    时间: 2013-11-16 17:25
= =。  楼主,你问题的描述已经秒杀了我,我看了好多遍,还是看不懂啊。
作者: 完美恋爱    时间: 2013-11-16 17:25
Weix1992 发表于 2013-11-16 17:20
楼主第二句话我没听懂,能再说清晰一点吗?

正常的话是这么也的
public static void main(String[] args)
{
     int  b = aaa(3);
     System.out.println(b);
}

public static int aaa(int a)
{
     int b = a;
     return b;
}
就是说调用那个函数,那个函数的返回值就给调用者
但是set,get函数里,为什么主函数只需调用set函数,就能得到返回值啊!返回值不是在get函数里吗,应该调用get函数才对啊!
作者: 完美恋爱    时间: 2013-11-16 17:27
一步一脚印 发表于 2013-11-16 17:25
= =。  楼主,你问题的描述已经秒杀了我,我看了好多遍,还是看不懂啊。

正常的话是这么写的
public static void main(String[] args)
{
     int  b = aaa(3);
     System.out.println(b);
}

public static int aaa(int a)
{
     int b = a;
     return b;
}
就是说调用那个函数,那个函数的返回值就给调用者
但是set,get函数里,为什么主函数只需调用set函数,就能得到返回值啊!返回值不是在get函数里吗,应该调用get函数才对啊!
作者: 完美恋爱    时间: 2013-11-16 17:28
Weix1992 发表于 2013-11-16 17:20
楼主第二句话我没听懂,能再说清晰一点吗?

比如 Test t = new Test();

正常的话是这么写的
public static void main(String[] args)
{
     int  b = aaa(3);
     System.out.println(b);
}

public static int aaa(int a)
{
     int b = a;
     return b;
}
就是说调用那个函数,那个函数的返回值就给调用者
但是set,get函数里,为什么主函数只需调用set函数,就能得到返回值啊!返回值不是在get函数里吗,应该调用get函数才对啊!
作者: Weix1992    时间: 2013-11-16 17:31
完美恋爱 发表于 2013-11-16 17:25
正常的话是这么也的
public static void main(String[] args)
{

你先看看我在2楼的回复。
  1. public class test() {
  2.     int a = 0;
  3.        public void setA(int i) {  //一般set方法不需要返回值
  4.             this.a = i;
  5.         }
  6.         
  7.        public int getA() {   
  8.             return a;
  9.         }
  10. }
复制代码

作者: 一步一脚印    时间: 2013-11-16 17:33
完美恋爱 发表于 2013-11-16 17:27
正常的话是这么写的
public static void main(String[] args)
{

不知道是不是这样,我的理解是
class Person{
    private String name;//set方法直接给它赋值的, 在本类中 访问name是不需要调用get方法
   //get方法是提供给外界看不到Person类的属性name的类 调用来获取name的值的。
    public void setName(String name){
        this.name = name;//这里是对Person类的name属性赋值. 而
     }

     public String getName(){
   return "name";
    }

}

不知道是不是你想要的答案。
作者: 完美恋爱    时间: 2013-11-16 17:34
Weix1992 发表于 2013-11-16 17:31
你先看看我在2楼的回复。

看了,我不是要问那个,728965074,你加我QQ吧!上线说的明白
作者: 段光宇    时间: 2013-11-16 17:38
1.其中的aaa是返给调用者的
  1. public static void main(String[] args)
  2. {
  3.     int b=getA();//调用getA,getA返回aaa值给b
  4. }
复制代码
2.set方法一般不需要返回值,要返给调用者就是get方法,set方法是赋值的
作者: 完美恋爱    时间: 2013-11-16 17:39
一步一脚印 发表于 2013-11-16 17:33
不知道是不是这样,我的理解是
class Person{
    private String name;//set方法直接给它赋值的, 在本 ...

我感觉这样才对
public int setA(int a)
{
        this  a  =   a;
        return    a;
}这里调用set方法就可以把返回值返回给调用者了
我感觉不应该写get方法了,因为即使写了,里面写的是返回值, 那没人调用get方法,它返回给谁呢?
作者: 一步一脚印    时间: 2013-11-16 17:47
完美恋爱 发表于 2013-11-16 17:39
我感觉这样才对
public int setA(int a)
{

我这下我明白了你的意思了。
      这个就设计方法论的问题了。get怎么可能会没人调用。你说你只要一个set方法,其实是可以的。
但是set字面上看是设置,并没有说有返回。为什么要这么设计,就是为了让程序员能够更好的理解和使用这些方法。    也是JavaBean的设计动机。
     如果按你这么说,不要get,那么Struts2只要的框架将会让程序员学起来感觉逻辑不对,不易于理解。这些东西都是那些科学家经过非常久的经验所总结出来的,肯定有其道理性,但不能保证一定正确。
这只是我的理解,不代表一定正确。
作者: Weix1992    时间: 2013-11-16 17:47
完美恋爱 发表于 2013-11-16 17:39
我感觉这样才对
public int setA(int a)
{

哦,原来你是这个意思。。。。

那我问你,如果我只是想拿到某个属性的值,却不想改变它的值,那我怎么办?而且这个时候属性是用private修饰的。分开是好区别功能,对属性就是分  查是查,改是改, 又查又改的时候估计是要完成某个功能了那就得另说。
作者: 完美恋爱    时间: 2013-11-16 17:52
一步一脚印 发表于 2013-11-16 17:47
我这下我明白了你的意思了。
      这个就设计方法论的问题了。get怎么可能会没人调用。你说你只要一个se ...

那解释一下为什么get方法被谁调用了啊!调用语句在哪里啊?我只看到在主函数里调用了set方法啊!
作者: 完美恋爱    时间: 2013-11-16 17:55
Weix1992 发表于 2013-11-16 17:47
哦,原来你是这个意思。。。。

那我问你,如果我只是想拿到某个属性的值,却不想改变它的值,那我怎么办 ...

可是返回语句是在get方法里啊!关键是我没有看到谁调用了get方法啊!既然没人调用,你为什么调用set方法就会得到返回值呢?
作者: hubby    时间: 2013-11-16 17:56
函数set是设置值,函数get是获取值。。。
作者: Weix1992    时间: 2013-11-16 18:01
完美恋爱 发表于 2013-11-16 17:52
那解释一下为什么get方法被谁调用了啊!调用语句在哪里啊?我只看到在主函数里调用了set方法啊! ...

你把你完整代码丢出来。。 在12楼 你自己写了
public int setA(int a) {
    this.a = a;
    return a;
}
这样当然会有返回值了啊!
作者: 完美恋爱    时间: 2013-11-16 18:06
Weix1992 发表于 2013-11-16 18:01
你把你完整代码丢出来。。 在12楼 你自己写了
public int setA(int a) {
    this.a = a;

public void setA(int a)
{
      ihis.a = a;
}
public int getA()
{
    return a;
}
我说的是这个啊!这个返回值是在get方法里的,但是没人调用
作者: Weix1992    时间: 2013-11-16 18:13
完美恋爱 发表于 2013-11-16 18:06
public void setA(int a)
{
      ihis.a = a;

这个返回值是在get()方法里。。
这句话就有问题!
get()方法里什么都没有,就提供了一个功能,就是把你的属性a的值给反回来。
作者: 小时候    时间: 2013-11-16 18:20
get()只是供main方法调用的功能,假设不返回给main()的话,结果只能是int类型,但是没有值
作者: 完美恋爱    时间: 2013-11-16 18:31
Weix1992 发表于 2013-11-16 18:13
这个返回值是在get()方法里。。
这句话就有问题!
get()方法里什么都没有,就提供了一个功能,就是把你的 ...

不是返回值在get方法里,是返回语句在get方法里
作者: 完美恋爱    时间: 2013-11-16 18:35
小时候 发表于 2013-11-16 18:20
get()只是供main方法调用的功能,假设不返回给main()的话,结果只能是int类型,但是没有值 ...

额,你回答的跟我问的不一样啊!
作者: Weix1992    时间: 2013-11-16 18:40
本帖最后由 Weix1992 于 2013-11-16 18:42 编辑
完美恋爱 发表于 2013-11-16 18:31
不是返回值在get方法里,是返回语句在get方法里


没人调用getA()方法,就没调用呗,

你是不是没有理解set方法里面的 this.a = a啊?
public void setA(int a) {}    //  这里的a是局部变量。
这this.a是指的成员变量的a,     
作者: 完美恋爱    时间: 2013-11-16 18:42
Weix1992 发表于 2013-11-16 18:40
没人调用getA()方法,就没调用呗,

你是不是没有理解set方法里面的 this.a = a啊?

你知道我QQ吧!加我Q说吧!这么说太慢啦!
作者: 完美恋爱    时间: 2013-11-16 18:59
Weix1992 发表于 2013-11-16 18:40
没人调用getA()方法,就没调用呗,

你是不是没有理解set方法里面的 this.a = a啊?

谢谢你的解答,我会了




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