鉴于下面的代码
class Parent {
def mth(p1: Int = 1, p2: Int = 2) = p1 + p2
}
class Child extends Parent{
override def mth(p2: Int = 10, p1: Int = 20) = super.mth(p2, p1)
}
object Main {
def main(args: String[]) = {
val parentRefToChild: Parent = new Child
println(parentRefToChild.mth(p1=1)) // 21
}
}
Run Code Online (Sandbox Code Playgroud)
输出是,21但我认为应该是11.在检查已编译的.class文件时,我发现parentRefToChild.mth(p1=1)编译为parentRefToChild.mth(1, parentRefToChild.mth$default$2()).scala编译器如何以这种方式运行.
scala ×1