Supposons que je souhaite étendre la classe C
, en obtenant SubC
.Quelle est la bonne façon d'appeler un constructeur de superclasse dans Scala?
Maintenant, je voudrais accéder à la variable c
en SubC
comme présenté dans l'exemple ci-dessous dans la méthode printC
.
Ce qui suit ne fonctionne pas, comme appeler printC
sur un SubC
exemple imprimera SubC
's c
et non C
est c
(je suppose que je aurais pu choisir de meilleurs noms ...)
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
}
}
A possible (mais indésirable) solution serait:
class SubC(cc: Int) extends C(cc) {
def printC = {
println(c)
}
}
Cela fonctionne, mais il introduit un nouvel identificateur (et non nécessaire) cc
dans le champ d'application.
Existe-t-il une meilleure façon (plus propre) de faire cela? PS: Pour mettre l'exemple ci-dessus dans un certain contexte.
Ce que je veux réellement faire est d'augmenter C
avec quelques traits sans introduire de nouveaux identifiants dans la portée.
pensée de Nice ... Le problème avec cette solution est cela crée une dépendance entre CanPrintC et C ... Je pourrais avoir plusieurs traits d'un paquet différent et créer un wrapper pour chacun d'entre eux semble être beaucoup de code dupliqué. – dankilman
ok .. désolé .. Bonne solution. Je l'ai mal compris au début. – dankilman