Scala中的语言特性是如何实现的(3) -- Trait(二)

2014-11-24 07:16:06 · 作者: · 浏览: 1
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
public abstract interface PeoplePleaser
{
  public abstract void objsets$PeoplePleaser$_setter_$moreMessage_$eq(String paramString);

  public abstract String moreMessage();

  public abstract void makePeopleHappy();
}

public abstract class PeoplePleaser$class
{
  public static void makePeopleHappy(PeoplePleaser $this)
  {
    Predef..MODULE$.println(new StringBuilder()
    .append(People like me. )
    .append($this.moreMessage()).toString());
  }

  public static void $init$(PeoplePleaser $this)
  {
    $this.objsets$PeoplePleaser$_setter_$moreMessage_$eq();
  }
}

public class Rose extends Plant
  implements PeoplePleaser
{
  private final String moreMessage;

  public void objsets$PeoplePleaser$_setter_$moreMessage_$eq(String x$1)
  {
  }

  public void makePeopleHappy()
  {
    PeoplePleaser$class.makePeopleHappy(this);
  }

  public String moreMessage() { return this.moreMessage; }

  public void smell() {
    Predef..MODULE$.println(Good!);
  }

  public Rose()
  {
    PeoplePleaser.class.$init$(this);
    this.moreMessage = Because I smell nice.;
  }
}

public class Dog extends Animal
  implements PeoplePleaser
{
  private final String moreMessage;

  public void objsets$PeoplePleaser$_setter_$moreMessage_$eq(String x$1)
  {
  }

  public void makePeopleHappy()
  {
    PeoplePleaser$class.makePeopleHappy(this);
  }

  public String moreMessage() { return this.moreMessage; }

  public void bark() {
    Predef..MODULE$.println(Woof!);
  }

  public Dog()
  {
    PeoplePleaser.class.$init$(this);
    this.moreMessage = Because I fetch balls.;
  }
}

现在就清楚了,抽象类中的静态方法可能会依赖于各个实例不同的状态,所以需要把this传递进去。 这样我们才能够给makePeopleHappy加上一段额外的信息。