Cuando queremos aumentar la funcionalidad de un método de la clase de la que se hereda
es necesario invocar el método sobreescrito desde la nueva versión del método.
Esto se consigue mediante la palabra reservada super
.
~/rubytesting/TheRubyProgrammingLanguage/Chapter7ClassesAndModules$ cat -n Point3D.rb 1 require "Point" 2 class Point3D < Point 3 def initialize(x, y, z) 4 super(x, y) 5 @z = z 6 end 7 end 8 if __FILE__ == $0 9 p = Point3D.new(1,2,3) 10 puts p.inspect 11 end
Ejecución:
~/rubytesting/TheRubyProgrammingLanguage/Chapter7ClassesAndModules$ ruby Point3D.rb #<Point3D:0x1001622f8 @y=2, @x=1, @z=3>
super
sin argumentos y sin paréntesis
entonces se le pasarán todos los argumentos con los que ha sido llamado el método
actual.
super()
lo llamará sin argumentos
super
entonces son los valores modificados los que son pasados en la invocación del correspondiente
método de la superclase:
~/rubytesting/TheRubyProgrammingLanguage/Chapter7ClassesAndModules$ cat -n Point3DSuper.rb 1 class Point 2 attr_reader :x, :y 3 4 def initialize(x,y) 5 @x,@y = x, y 6 end 7 end 8 9 class Point3D < Point 10 attr_reader :z 11 def initialize(x, y, z) 12 x, y = x+1, y+1 13 super(x, y) 14 @z = z 15 end 16 end 17 if __FILE__ == $0 18 p = Point3D.new(1,1,1) 19 puts "#{p.x} #{p.y} #{p.z}" 20 end
Ejecución:
~/rubytesting/TheRubyProgrammingLanguage/Chapter7ClassesAndModules$ ruby Point3DSuper.rb 2 2 1
Casiano Rodriguez León 2015-01-07