Предположим, я хотел бы расширить класс C
, получив SubC
.
Теперь я хотел бы получить доступ к переменной c
в SubC
, как показано в примере ниже в методе printC
.
Следующее не работает, так как вызов printC
для экземпляра SubC
выведет 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
некоторыми чертами, не вводя новые идентификаторы в область действия.