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加上一段额外的信息。