Переопределение методов подкласса с аргументами подкласса?

Как заставить базовые методы принимать один и тот же конкретный экземпляр подкласса при переопределении подклассом?

т. е.:

abstract class Animal {
  def mateWith(that: Animal)
}

class Cow extends Animal {
  override def mateWith...?
}

По логике, Cowдолжен иметь возможность только mateWithдругого Cow. Однако, если я сделаю override def mateWith(that: Cow), это фактически не переопределит метод базового класса (, который я хочу, поскольку я хочу обеспечить его существование в подклассе ).

Я мог бы убедиться, что другой экземпляр имеет тип Cow, и создать исключение, если это не так -это мой лучший вариант? Что, если у меня будет больше животных? Мне пришлось бы повторить код исключения -.

6
задан Kevin Li 17 April 2012 в 21:13
поделиться