Angenommen, ich möchte die Klasse C
erweitern, bekommen SubC
.Wie lautet der richtige Aufruf eines Superklassenkonstruktors in Scala?
Jetzt möchte ich auf die Variable c
in SubC
zugreifen, wie im Beispiel unten in der Methode printC
dargestellt.
Die folgende nicht funktioniert, wie printC
auf einem SubC
Instanz aufrufen druckt SubC
's c
und nicht C
' s c
(Ich glaube, ich bessere Namen ausgewählt haben könnte ...)
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 möglich (aber nicht wünschenswert) Lösung wäre:
class SubC(cc: Int) extends C(cc) {
def printC = {
println(c)
}
}
Dies funktioniert, aber es wird eine neue (und nicht benötigte) -Kennung cc
in den Umfang.
Gibt es eine bessere (sauberere) Art, dies zu tun?
PS: Um das obige Beispiel in einen Kontext zu setzen. Was ich eigentlich tun möchte, ist C
mit einigen Merkmalen zu erweitern, ohne neue Identifikatoren in den Anwendungsbereich einzuführen.
Nizza denkt ... das Problem mit dieser Lösung ist, dass es eine Abhängigkeit zwischen CanPrintC und C schafft ... Ich könnte mehrere Merkmale von einem anderen Paket haben und das Erstellen eines Wrappers für jeden von ihnen scheint, als würde viel Code dupliziert werden. – dankilman
ok .. sorry .. Gute Lösung. Ich habe es zuerst falsch verstanden. – dankilman