假設我想擴展類C
,得到SubC
。在Scala中調用超類構造函數的正確方法是什麼?
現在我想訪問SubC
中的變量c
,如以下示例中的方法printC
中所示。
下不能正常工作,如在SubC
實例調用printC
將打印SubC
的c
而不是C
的c
(我想我可能已經選擇更好的名字......)
class C(protected var c : Int) {
def update(n : Int) {
c = n
}
}
class SubC(c: Int) extends C(c) {
def printC : Unit = {
println(c)
}
}
object Main {
def main(args: Array[String]) {
val subC = new SubC(1)
subC.update(3)
subC.printC // prints 1
}
}
一可能(但不期望的)的解決辦法是:
class SubC(cc: Int) extends C(cc) {
def printC = {
println(c)
}
}
這工作,但它引入了一個新的(不需要的)標識符cc
進入範圍。
有沒有更好的(更清潔)的方式來做到這一點? PS:把上面的例子放到一些上下文中。我實際上想要做的是增加C
的某些特徵,而不是將新的標識符引入範圍。
尼斯思維......這種解決方案的問題它創建CanPrintC和C之間的依賴關係......我可能有不同包中的幾個特徵,併爲它們中的每一個創建包裝,好像很多代碼會被重複。 – dankilman 2010-11-19 17:39:24
好吧..對不起。良好的解決方案。起初我誤解了它。 – dankilman 2010-11-19 17:49:31