黑马程序员技术交流社区

标题: 苹果削皮 这道编码的this指的是谁? [打印本页]

作者: 黑马-李权88    时间: 2014-12-24 08:22
标题: 苹果削皮 这道编码的this指的是谁?
大家好,这是一道苹果削皮的题,class Apple 中的  return Peeler.peel(this) ;
请问this代表谁呢?我画了个内存图
class Person3
{
   public void eat(Apple apple)
   {
      Apple peeled=apple.getPeeled();
      System.out.println("Yummy");
   }
}
class Peeler{
   static Apple peel(Apple apple)
   {
      //...remove peel
      return apple;//peeled
   }
}
class Apple{
   Apple getPeeled()
   {
      return Peeler.peel(this);
   }
}
public class PassingThis
   {
      public static void main(String[] args)
      {
        Apple aa= new Apple();
        Person3 p3= new Person3();
        p3.eat(aa);
      }
}//out:Yummy

eat.png (81.15 KB, 下载次数: 3)

eat.png

作者: 青衫禅客    时间: 2014-12-24 14:19
个人感觉你代码逻辑有问题,苹果自己怎么会有削苹果的方法呢?!
这是我自己改过的代码:
class Person3
{
   public void eat(Apple apple)
   {
      Peeler.getPeeled(apple);
      System.out.println("苹果好好吃");
         
   }
}
class Peeler{
   static Apple getPeeled(Apple apple)
   {
      System.out.println("削过了");
      return apple;
          
   }
}
class Apple{
   Apple()
   {
           System.out.println("我是一只小苹果");
   }
}
public class PassingThis
   {
      public static void main(String[] args)
      {
        Apple aa= new Apple();
        Person3 p3= new Person3();
        p3.eat(aa);
      }
}
作者: as604049322    时间: 2014-12-24 16:50
表示好无聊,,,我也无聊一次
  1. class PeelApple{
  2.     public static void main(String[] args) {
  3.         Apple red=new Apple("红");
  4.         Apple green=new Apple("绿");
  5.         new Person("张三",18).eatApple(red).peelApple(green).peelApple(red).eatApple(green).eatApple(red).eatApple(green).eatApple(red);
  6.     }
  7. }
  8. class Person{
  9.     String name;
  10.     int age;
  11.     Person(String name,int age){
  12.         this.name=name;
  13.         this.age=age;
  14.     }
  15.     public Person eatApple(Apple a){
  16.         if(a.isTrue){
  17.             if(a.peel){
  18.                 System.out.println(name+":苹果有皮,我不吃");
  19.             }else{
  20.                 a.isTrue=false;
  21.                 System.out.println(name+":呵呵,"+a.color+"苹果真好吃。");
  22.             }
  23.         }else{
  24.              System.out.println(name+":你传给我的苹果不存在,我怎么吃啊?");
  25.         }
  26.         return this;
  27.     }
  28.     public Person peelApple(Apple a){
  29.         if(a.isTrue){
  30.             if(a.peel){
  31.                 a.peel=false;
  32.                 System.out.println(name+":"+a.color+"苹果削皮成功");
  33.             }else{
  34.                 System.out.println(name+":"+a.color+"苹果已经被削皮了,我不能再削了");
  35.             }
  36.         }else{
  37.              System.out.println(name+":"+"你传给我的苹果根本就不存在,我怎么削皮啊?");
  38.         }
  39.         return this;
  40.     }
  41. }
  42. class Apple{
  43.     String color;
  44.     boolean peel=true;//是否有皮
  45.     boolean isTrue=true;//是否存在
  46.     Apple(String color){
  47.         this.color=color;
  48.     }
  49. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2