¿Cómo puedo forzar que los métodos base tomen en la misma instancia de subclase específica cuando son reemplazados por una subclase?¿Reemplazando los métodos de subclase con argumentos subclase?
es decir .:
abstract class Animal {
def mateWith(that: Animal)
}
class Cow extends Animal {
override def mateWith...?
}
Lógicamente, un Cow
sólo debe ser capaz de mateWith
otra Cow
. Sin embargo, si lo hago override def mateWith(that: Cow)
, esto en realidad no anula el método de la clase base (que yo quiero, ya que quiero imponer su existencia en la subclase).
Podría verificar para asegurarse de que la otra instancia sea de tipo Cow, y lanzar una excepción si no es - ¿esta es mi mejor opción? ¿Qué pasa si tengo más animales? Tendría que repetir el código de lanzamiento de excepción.
¡Encantador, Scala es conveniente como diablos! –
No estoy tan seguro acerca de "conveniente", pero es expresivo. –
Pensé en volver a visitar esto; esto se conoce como [f-acotado-polimorfismo] (https://twitter.github.io/scala_school/advanced-types.html#fbounded). –