Допустим, у меня есть следующая черта
trait Foo[T] {
def overrideMe(other:Foo[T]) : Int
}
Я бы хотел иметь возможность
class Bar extends Foo[Int] {
override def overrideMe(other:Bar) : Int = other.BarFn
}
, но она не компилируется.Причина в том, что я бы хотел, чтобы overrideMe мог использовать функциональность подтипа.Я мог бы сделать что-то вроде
class Bar extends Foo[Int] {
override def overrideMe(other:Foo[Int]) : Int = {
other.asInstanceOf[Bar].BarFn
}
, но это выглядит не очень хорошо.
Можно ли сказать, что виртуальная функция может быть переопределена подтипом?
edit @agilesteel Это почти работает, но у меня возникают проблемы, если у меня есть функция в другом классе, полагающаяся только на черту Foo
class Test[T] {
def callOverrideMe(a : Foo[T], b : Foo[T] ) : Int = a.overrideMe(b)
}
Я получаю ошибку компиляции: несоответствие типов;найдено b.type (с базовым типом foo.Foo [T]) требуется a.SubType