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 |
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 |
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 |