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; 我理解不上去。
{
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; 我理解不上去。
{
a = i;
}
是构造方法啊
再看Test ob2; 既然obj2也是Test类,那么 ob2 = ob2.c();当然也就是正确的了.....
java中,具体的类也可以作为返回类型
Java中类的方法返回对象的时候,其实只是返回一个地址.
return不一定非要在返回值时才用到,也可以把它放到需要的位置,提前结束对该方法的调用。
ob2虽然没有创建,但是它通过ob1调用c()方法获得了一个Test对象
当然可以使用Test类的c()方法了!
ob2 = ob1.c(); c() 方法中创建了Test 的对象,并返回该对象,ob2接受了该对象,也就等价于 ob2 =new Test(a+10);
public int show(){
int a=10;
return a;
}
和你的c()方法也是一样的,int a 也可以认为是一个int 的对象,如果你就的返回对象难理解,你也可以理解为返回的是一个自己定义的 Test 类型.
c是方法名
{
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; 我理解不上去。 // 返回对象和返回变量没什么两样,对象也是一个变量。楼主应该是没理解 面向对象的一些基础概念
System.out.println("ob2.a after second increase: "+ ob2.a); 当再次调用方法c(){}时那就再一次执行Test temp = new Test(a+10);
return temp;是不是就又创建了一个新的对象,引用给了ob2.如果是,我能理解的是反复创建对象,反复引用给ob2.不能理解的是temp为什么反复被创建,名字重复啊
因为:Test temp = new Test(a+10); 已经声名temp是Test类型的;
所以返回:return temp;
因为:Test ob2; ob2 也是Test类型的
所以:ob2 = ob2.c(); 负值temp给ob2。记住:在不进行类型转换的条件下;
类似 XXX=XXX 负值;;必须“左边比右边大/等”;
就像:Integer = int;