Окончательные методы не могут быть переопределены в подклассе. Но с магией Скалы кажется, что это возможно.Завершить окончательный метод
Рассмотрим следующий пример:
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
. Возможно ли это или этот метод «вроде переопределен»?
Почему Scala относится к ней как к другой подписи? Это потому, что первый метод, а второй - функция? – SzymonPajzert