【发布时间】:2018-05-02 21:53:18
【问题描述】:
为什么这段代码中对重载定义的引用不明确?
class A {
def m(a1: A, o2: Any): A = {
print("1")
a1
}
def m(a1: A, a2: A): A = {
print("2")
a1
}
def m(o1: Any, o2: Any): Any = {
print("3")
o1
}
def m(o: Any): Any = {
print("4")
o
}
}
class B extends A {
def m(b1: B, o2: Any): A = {
print("5")
b1
}
override def m(a: A, o2: Any): B = {
print("6")
this
}
override def m(o1: Any, o2: Any): Any = {
print("7")
o1
}
def m(i: Int): Unit = { print("8") }
}
val a = new A
val b = new B
b.m(a, a)
上面的代码给出了编译错误:
对重载定义的模糊引用,
[错误] 类型 B 中的两个方法 m (a: A, o2: Any)B
[error] 和类型 A 中的方法 m (a1: A, a2: A)A [error] 匹配 参数类型(A,B)
但我的理解是method m in class A of type (a1: A, a2: A)A更具体
比method m in class B of type (a: A, o2: Any)B
感谢任何提示。
【问题讨论】:
标签: scala overloading overload-resolution