Capítulo 15. Redefinición de métodos
En una subclase se puede modificar el comportamiento de las instancias redefiniendo los métodos de la superclase.
ruby> class Humano
ruby| def identidad
ruby| print «soy una persona.\n»
ruby| end
ruby| def tarifa_tren(edad)
ruby| if edad < 12
ruby| print «tarifa reducida.\n»
ruby| else
ruby| print «tarifa normal. \n»
ruby| end
ruby| end
ruby| end
nil
ruby> Humano.new.identidad
soy una persona.
nil
ruby> class Estudiante<Humano
ruby| def identidad
ruby| print «soy un estudiante.\n»
ruby| end
ruby| end
nil
ruby> Estudiante.new.identidad
soy un estudiante.
nil
Supongamos que en vez de reemplazar el método identidad lo que queremos es mejorarlo. Para ello podemos utilizar super
ruby> class Estudiante2<Humano
ruby| def identidad
ruby| super
ruby| print «también soy un estudiante.\n»
ruby| end
ruby| end
nil
ruby> Estudiante2.new.identidad
soy una persona.
también soy un estudiante.
nil
super nos permite pasar argumentos al método original. Se dice que hay dos tipos de personas …
ruby> class Deshonesta<Humano
ruby| def tarifa_tren(edad)
ruby| super(11) #quiero una tarifa barata
ruby| end
ruby| end
nil
ruby> Deshonesta.new.tarifa_tren(25)
tarifa reducida.
nil
ruby> class Honesta<Humano
ruby| def tarifa_tren(edad)
ruby| super(edad) #pasa el argumento entregado
ruby| end
ruby| end
nil
ruby> Honesta.new.tarifa_tren(25)
tarifa normal.
nil