Endgültige Methoden können in einer Unterklasse nicht überschrieben werden. Aber mit der Magie von Scala scheint das möglich zu sein.Endgültige Methode überschreiben
betrachte das folgende Beispiel:
trait Test {
final def doIt(s: String): String = s
}
object TestObject extends Test {
def doIt: String => String = s => s.reverse
}
Verfahren doIt
in dem Objekt TestObject
hat nicht die gleiche Signatur wie in doIt
trait Test
. Somit wird doIt
überladen statt überschrieben. Aber ein normaler Anruf doIt
ruft immer die Methode in TestObject
:
val x = TestObject.doIt("Hello") //> x : String = olleH
Frage: Wie kann ich die Original-Methode aufrufen doIt
auf dem TestObject
. Ist das möglich oder ist diese Methode "übergangen"?
Warum Scala es als unterschiedliche Signatur behandelt? Liegt es daran, dass die erste Methode und die zweite Funktion ist? – SzymonPajzert