A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Person {
           public void eat (Apple apple){
                   Apple peeled = apple.getPeeled();
                   System.out.println("Yummy");
           }
        }
        class Peeler{
           static Apple peel(Apple apple){
                   return apple;
           }
        }
        class Apple {
                Apple getPeeled(){return peeler.peel(this)}
        }
        public class PassingThis{
                public static void main(String[] args){
                        new Person().eat(new Apple());
                }
        }

以上的程序怎么分析,麻烦大神说一下详细分析过程,解释一下结果为什么?

2 个回复

正序浏览
本帖最后由 niuapp 于 2015-5-11 13:45 编辑
  1. <p><p><p>/*   </p><p>                     输出:     Yummy  \n   -----   \n  苹果</p><p> </p><p>             </p><p>                       结论:   谁 调用 那个方法,方法中的 this 就代表谁 </p><p>  */</p><p>
  2. class Person {
  3.                     //2.     //      把  对象 a 传给apple
  4.         public void eat (Apple apple){
  5.                 //Apple peeled = apple.getPeeled(); 把它分开 如下
  6.                 //创建一个Apple类的对象 peeled
  7.                 Apple peeled;
  8.                 //用对象 apple = a        调用Apple的方法 getPeeled()        给这个对象赋值, 转 3
  9.                 peeled = apple.getPeeled();//6. peeled = a;
  10.                 System.out.println("Yummy"+"\n-----\n"+peeled.name);//peeled.name = a.name;
  11.         }
  12. }
  13.                                  
  14. //4.         
  15. class Peeler{
  16.         //这个方法返回一个 Apple 类型的对象
  17.         static Apple peel(Apple apple){
  18.                 //返回传过来的 apple 转 5
  19.                 return apple;
  20.         }
  21. }
  22.   
  23. //
  24. class Apple {
  25.          
  26.          String name;
  27.          //返回一个Apple类型 的对象
  28.         Apple getPeeled(){
  29.                 //因为这个方法是 2 那里的 apple调用的,所以这个this指的就是 1中的 a, 让这个a对象的 name属性变成“苹果”
  30.                  this.name = "苹果";
  31.                  
  32.                 //3. 调用 Peeler类下的 方法peel 它需要一个Apple类型的参数 转 4
  33.                 return Peeler.peel(this);  // 5. 这里的 Peeler.peel(this) 就是 a,把对象 a返回到6
  34.         }
  35. }

  36. //1.
  37. public class PassingThis{
  38.         public static void main(String[] args){
  39.                 //new Person().eat( new Apple() );
  40.                 //把原来的匿名对象转换成下边的
  41.                 Person p = new Person();
  42.                 Apple a = new Apple();
  43.                 //调用 Person 类的方法 eat(Apple apple)  把对象 a 传过去, 转2
  44.                 p.eat(a);
  45.                
  46.         }
  47. }
  48. </p></p></p></p>
复制代码


有个 插入代码 的选项
回复 使用道具 举报
为什么技术贴都没人回复????
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马