Вы делаете очень понятную ошибку - вы пытаетесь написать безопасные по типу равно (то есть def equals(r: Rational)
) вместо общих равных (то есть override def equals(a: Any)
).
Таким образом, вместо переопределенияequals
- обратите внимание, что вам не нужно ключевое слово override
! - вы создаете другой метод, перегружая параметры типа, а затем два равны методам, один из которых принимает Rational
и тот, который занимает Any
.То же самое с ==
;только Any
-параметризованный метод не может быть переопределен.
Чтобы согласовать поведение с Java (и библиотекой Scala), вам нужно переписать equals как что-то вроде
override def equals(a: Any) = a match {
case r: Rational => numer == r.numer && denom == r.demon
case _ => false
}