Как заставить базовые методы принимать один и тот же конкретный экземпляр подкласса при переопределении подклассом?
т. е.:
abstract class Animal {
def mateWith(that: Animal)
}
class Cow extends Animal {
override def mateWith...?
}
По логике, Cow
должен иметь возможность только mateWith
другого Cow
. Однако, если я сделаю override def mateWith(that: Cow)
, это фактически не переопределит метод базового класса (, который я хочу, поскольку я хочу обеспечить его существование в подклассе ).
Я мог бы убедиться, что другой экземпляр имеет тип Cow, и создать исключение, если это не так -это мой лучший вариант? Что, если у меня будет больше животных? Мне пришлось бы повторить код исключения -.