在使用 Scala 时,我有一个这样的代码:
class Superclass(var i : Int){}
class Subclass(i : Int) extends Superclass(0) {
print(i)
}
发现print(i)
打印出Subclass(i : Int)
i
现在,我的问题是:在这种情况下,我如何访问 Superclass
的字段 i
?
最佳答案
Type ascription可以向上转换 this
的类型,从而有效地消除两个标识符的歧义
class Subclass(i : Int) extends Superclass(0) {
print((this: Superclass).i)
print(i)
}
作为旁注,还存在以下 syntax可以在方法成员的情况下使用(并且可能不为人所知)
super[ClassQualifier]
例如,考虑以下情况
trait A {
def f = "A"
}
trait B extends A {
override def f = "B"
}
class C extends A with B {
println(super[A].f)
println(super[B].f)
println(f)
override def f = "C"
}
new C
// A
// B
// C
关于scala - 消除与父类(super class)的类字段同名的构造函数参数的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62682390/