Teóricamente es sonido para reemplazar los métodos de uno de los padres en una subclase con un método en el que los parámetros son los supertipos de los parámetros de la clase padre, como:¿Hay lenguajes de programación de tipo estático con herencia donde los parámetros del método son contravariantes?
class T
def foo(s: String) = ...
class S
override def foo(a: Any) = ...
¿Qué lenguajes de programación son compatibles con esta "característica" y cómo Cómo se resuelven problemas como la posibilidad de que un solo método de una subclase puede anular múltiples métodos de una clase padre: (. Suponiendo que String
y Int
subtipos de Any
)
class T
def foo(s: String) = ...
def foo(i: Int) = ...
class S
override def foo(a: Any) = ...
Si habla de lenguajes tipados estáticos de lo que no sé. Los lenguajes de tipado dinámico no se preocupan por este problema, así que supongo que está hablando de lenguajes tipados estáticamente. Por favor, tenga en cuenta en su pregunta. –
WIkipedia afirma que un lenguaje llamado "Sather" tiene una contravariancia (http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29#Sather, http://en.wikipedia.org/wiki/Sather), pero yo no puede garantizar su precisión. –
no conozco ese lenguaje, pero no veo ningún problema con el hecho de que un método puede anular múltiples métodos de superclase. cuando haces 'sInstance.foo (anyObject)' entonces se llama a este método. no 'T.foo (String)' ni 'T.foo (Int)'. No hay problema para el compilador. solo usted, como programador, tiene que diseñar sus clases, por lo que esta invocación tiene sentido – piotrek