日期:2014-05-20  浏览次数:20698 次

java 基础问题

public class Chapter5_test2 {

/**
* @param args
*/

public static void main(String[] args) {
Apple a=new Apple();
Person p=new Person();
p.eat(a.getPeeled());//1@@
p.eat(a);//2@@
// TODO Auto-generated method stub

}

}
class Person{
public void eat(Apple apple){
Apple peeled=apple.getPeeled();
System.out.println("Yunm");
}
}
class Apple{
Apple getPeeled(){
return Peeler.peel(this);

}
}
class Peeler{
static Apple peel(Apple apple){
return apple;
}

}
输出结果是一样的1和2;
问题是注释1和2有什么区别,我觉得new Apple()的时候并没有调用getPeelde()方法 返回Apple对象啊。。为什么呢

------解决方案--------------------
注释1是取出了对象的一个值设置给Person,注释2是把整个对象设置给了Person
------解决方案--------------------
p.eat(a.getPeeled());//1@@ 这苹果削了两次
p.eat(a);//2@@ 这苹果削了一次
打印的结果都是调用了Person中的eat()方法造成的。
------解决方案--------------------
p.eat(a.getPeeled());//1@@ 

把Apple类中的方法作为eat方法的实参

p.eat(a);//2@@ 

把Apple类的引用作为eat方法的实参