Окончательные методы не могут быть переопределены в подклассе. Но с магией Scala кажется, что это возможно.
Рассмотрим следующий пример:
trait Test {
final def doIt(s: String): String = s
}
object TestObject extends Test {
def doIt: String => String = s => s.reverse
}
Метод doIt в объекте TestObject имеет не та же подпись, что и doIt в признаке Test. Таким образом, doIt перегружается, а не переопределяется. Но обычный вызов doIt всегда вызывает метод в TestObject:
val x = TestObject.doIt("Hello") //> x : String = olleH
Вопрос:
Как вызвать исходный метод doIt на TestObject. Возможно ли это или этот метод "вроде переопределен"?