初学者求助~!!!

jingulang 2008-05-09 04:47:34
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; 我理解不上去。
...全文
112 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
huxinyu929 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 jingulang 的帖子:]

另外谁能给我解释下什么叫返回对象啊,这句return temp; 我理解不上去。

[/Quote]

因为:Test temp = new Test(a+10); 已经声名temp是Test类型的;
所以返回:return temp;


因为:Test ob2; ob2 也是Test类型的
所以:ob2 = ob2.c(); 负值temp给ob2。

记住:在不进行类型转换的条件下;
类似 XXX=XXX 负值;;必须“左边比右边大/等”;
就像:Integer = int;
huxinyu929 2008-05-09
  • 打赏
  • 举报
回复
看错了~~不好意思~~~

这个市 返回 一个 Test 类型 的 方法
jingulang 2008-05-09
  • 打赏
  • 举报
回复
看最后两行

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为什么反复被创建,名字重复啊
Ice0River 2008-05-09
  • 打赏
  • 举报
回复
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; 我理解不上去。

// 返回对象和返回变量没什么两样,对象也是一个变量。

楼主应该是没理解 面向对象的一些基础概念
莫情莫钱 2008-05-09
  • 打赏
  • 举报
回复
Test也是一个类呀,返回类型是Test的对象
smallclub 2008-05-09
  • 打赏
  • 举报
回复
Test 是返回值类型
c是方法名
xiaoqiangcn 2008-05-09
  • 打赏
  • 举报
回复
方法返回的可以是类型,也可以是对象呀,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 类型.


qusic 2008-05-09
  • 打赏
  • 举报
回复
4楼正解!
ob2虽然没有创建,但是它通过ob1调用c()方法获得了一个Test对象
当然可以使用Test类的c()方法了!
刘彬彬 2008-05-09
  • 打赏
  • 举报
回复
回答LZ返回对象的问题.
Java中类的方法返回对象的时候,其实只是返回一个地址.
return不一定非要在返回值时才用到,也可以把它放到需要的位置,提前结束对该方法的调用。
duzhonghua 2008-05-09
  • 打赏
  • 举报
回复
肯定不是, 4楼回答正确!!! 因为他前面没加上关键字,比如private ,public ,粗略一看晕了,是吧,呵呵,
hbofan 2008-05-09
  • 打赏
  • 举报
回复
Test c(){}是构造方法??确定不是!
hbofan 2008-05-09
  • 打赏
  • 举报
回复
其中方法c(){} 是Test,既然知道好似声明返回类型,就不要怀疑了啊,这个方法返回的就是Test类
再看Test ob2; 既然obj2也是Test类,那么 ob2 = ob2.c();当然也就是正确的了.....
java中,具体的类也可以作为返回类型


jingulang 2008-05-09
  • 打赏
  • 举报
回复
Test c(){}是构造方法? 我理解的是 他是Test这个类的方法

Test(int i)
{
a = i;
}
是构造方法啊
huxinyu929 2008-05-09
  • 打赏
  • 举报
回复
也可以理解为:我是我类型的
huxinyu929 2008-05-09
  • 打赏
  • 举报
回复
Test c(){}是构造方法 ;

temp是ob2类型的

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧