class Test
{
    int a;
    Test(int i) 
  {
    a = i;
  }
  Test c()   {
    Test temp = new Test(a+10);
    return temp;
  }
}class RetOb 
{
  public static void main(String args[]) 
  {
    Test ob1 = new Test(2);
    Test ob2;
    ob2 = ob1.c();
    System.out.println("ob1.a: " + ob1.a);
    System.out.println("ob2.a: " + ob2.a);
    ob2 = ob2.c();
    System.out.println("ob2.a after second increase: "+ ob2.a);
  }
}这是书上的一段代码。其中方法c(){} 前面为什么是Test,方法名前面不是声明返回的类型吗? 怎么加上Test这个类名了。还有 ob2 = ob2.c(); 根本没创建ob2这个对象,为什么可以用ob2调用方法c(){}啊 另外谁能给我解释下什么叫返回对象啊,这句return temp;  我理解不上去。

解决方案 »

  1.   

    Test c(){}是构造方法 ;temp是ob2类型的
      

  2.   

    Test c(){}是构造方法? 我理解的是 他是Test这个类的方法Test(int i)  
      { 
        a = i; 
      } 
    是构造方法啊
      

  3.   

    其中方法c(){} 是Test,既然知道好似声明返回类型,就不要怀疑了啊,这个方法返回的就是Test类
    再看Test ob2; 既然obj2也是Test类,那么 ob2 = ob2.c();当然也就是正确的了.....
    java中,具体的类也可以作为返回类型
      

  4.   

    Test c(){}是构造方法??确定不是!
      

  5.   

    肯定不是, 4楼回答正确!!!  因为他前面没加上关键字,比如private ,public ,粗略一看晕了,是吧,呵呵,
      

  6.   

    回答LZ返回对象的问题.
       Java中类的方法返回对象的时候,其实只是返回一个地址.
         return不一定非要在返回值时才用到,也可以把它放到需要的位置,提前结束对该方法的调用。
      

  7.   

    4楼正解!
    ob2虽然没有创建,但是它通过ob1调用c()方法获得了一个Test对象
    当然可以使用Test类的c()方法了!
      

  8.   

    方法返回的可以是类型,也可以是对象呀,Test c(){}  返回的就是 Test 对象.
    ob2 = ob1.c();  c() 方法中创建了Test 的对象,并返回该对象,ob2接受了该对象,也就等价于 ob2 =new Test(a+10); 
    public int show(){
       int a=10;
       return a;
    }
    和你的c()方法也是一样的,int a 也可以认为是一个int 的对象,如果你就的返回对象难理解,你也可以理解为返回的是一个自己定义的 Test 类型.
      

  9.   

    Test 是返回值类型
    c是方法名
      

  10.   

    Test也是一个类呀,返回类型是Test的对象
      

  11.   

    class Test 

        int a; 
        Test(int i)  // 这个是构造函数
      { 
        a = i; 
      } 
      Test c()   {   // 返回Test类型的方法,java允许在类定义内部使用该类本身
        Test temp = new Test(a+10); 
        return temp; 
      } 
    } class RetOb  

      public static void main(String args[])  
      { 
        Test ob1 = new Test(2); 
        Test ob2; 
        ob2 = ob1.c(); 
        System.out.println("ob1.a: " + ob1.a); 
        System.out.println("ob2.a: " + ob2.a); 
        ob2 = ob2.c(); 
        System.out.println("ob2.a after second increase: "+ ob2.a); 
      } 
    } 这是书上的一段代码。 其中方法c(){} 前面为什么是Test,方法名前面不是声明返回的类型吗? 怎么加上Test这个类名了。 还有 ob2 = ob2.c(); 根本没创建ob2这个对象,为什么可以用ob2调用方法c(){}啊
    //  ob2 = ob1.c();  这里 ob2已经被实例化了  另外谁能给我解释下什么叫返回对象啊,这句return temp;  我理解不上去。 // 返回对象和返回变量没什么两样,对象也是一个变量。楼主应该是没理解 面向对象的一些基础概念 
      

  12.   

    看最后两行ob2 = ob2.c(); 
    System.out.println("ob2.a after second increase: "+ ob2.a); 当再次调用方法c(){}时那就再一次执行Test temp = new Test(a+10); 
                 return temp;是不是就又创建了一个新的对象,引用给了ob2.如果是,我能理解的是反复创建对象,反复引用给ob2.不能理解的是temp为什么反复被创建,名字重复啊
      

  13.   

    看错了~~不好意思~~~这个市 返回 一个 Test 类型  的 方法 
      

  14.   


    因为:Test temp = new Test(a+10);   已经声名temp是Test类型的;
    所以返回:return temp; 
    因为:Test ob2;    ob2  也是Test类型的
    所以:ob2 = ob2.c();    负值temp给ob2。记住:在不进行类型转换的条件下;
    类似   XXX=XXX   负值;;必须“左边比右边大/等”;
    就像:Integer = int;