【发布时间】:2017-05-24 15:40:41
【问题描述】:
假设下面的例子——执行时返回——“fatherfather”
trait Action {
def doSomething(s:String = "father") = s
}
class RevokeAction extends Action{
override def doSomething(s:String) = {
s + s
}
}
object HelloWorld {
def main(args: Array[String]): Unit = {
val revokeAction = new RevokeAction()
revokeAction.doSomething()
}
}
查看编译器所做的事情 - 更好地解释正在发生的事情
package <empty> {
abstract trait Action extends Object {
def doSomething(s: String): String = s;
<synthetic> def doSomething$default$1(): String = "father";
def /*Action*/$init$(): Unit = {
()
}
};
class RevokeAction extends Object with Action {
<synthetic> def doSomething$default$1(): String = RevokeAction.super.doSomething$default$1();
override def doSomething(s: String): String = s.+(s);
def <init>(): RevokeAction = {
RevokeAction.super.<init>();
RevokeAction.super./*Action*/$init$();
()
}
};
object HelloWorld extends Object {
def main(args: Array[String]): Unit = {
val revokeAction: RevokeAction = new RevokeAction();
{
revokeAction.doSomething(revokeAction.doSomething$default$1());
()
}
};
def <init>(): HelloWorld.type = {
HelloWorld.super.<init>();
()
}
}
}
能否详细说明为什么这是预期的行为?
【问题讨论】:
标签: scala