Inheritance and Modules
Method Override
A subclass can replace a parent method with behavior that fits the more specific class.
method override
When a subclass defines a method with the same name, Ruby uses the subclass version.
Method Override
method_override.rb
Replay: real traced execution (multi-file project)
class Vehicle
def move(speed)
"moving at #{speed}"
end
end
class Bicycle < Vehicle
def move(speed)
"pedaling at #{speed}"
end
end
speed = 4
vehicle = Vehicle.new
bicycle = Bicycle.new
puts vehicle.move(speed)
puts bicycle.move(speed)
class Vehicle
def move(speed)
"moving at #{speed}"
end
end
class Bicycle < Vehicle
def move(speed)
"pedaling at #{speed}"
end
end
speed = 1
vehicle = Vehicle.new
bicycle = Bicycle.new
puts vehicle.move(speed)
puts bicycle.move(speed)
class Vehicle
def move(speed)
"moving at #{speed}"
end
end
class Bicycle < Vehicle
def move(speed)
"pedaling at #{speed}"
end
end
speed = 8
vehicle = Vehicle.new
bicycle = Bicycle.new
puts vehicle.move(speed)
puts bicycle.move(speed)
speed ← 4, vehicle ← ⟨Vehicle A⟩, bicycle ← ⟨Bicycle B⟩
13speed→ 4 = 4 #@speed=1, 814vehicle→ ⟨Vehicle A⟩ = Vehicle.new15bicycle→ ⟨Bicycle B⟩ = Bicycle.new1617puts vehicle.move(speed)moving at 418puts bicycle.move(speed)def move(speed)
1class Vehicle2 def move(speed4)3 "moving at #{speed4}"4 endputs vehicle.move(speed)
17puts vehicle.move(speed)moving at 418puts bicycle.move(speed)pedaling at 4outputmoving at 4def move(speed)
7class Bicycle < Vehicle8 def move(speed4)9 "pedaling at #{speed4}"10 endputs bicycle.move(speed)
17puts vehicle.move(speed)18puts bicycle.move(speed)pedaling at 4outputpedaling at 4
speed ← 1, vehicle ← ⟨Vehicle A⟩, bicycle ← ⟨Bicycle B⟩
13speed→ 1 = 114vehicle→ ⟨Vehicle A⟩ = Vehicle.new15bicycle→ ⟨Bicycle B⟩ = Bicycle.new1617puts vehicle.move(speed)moving at 118puts bicycle.move(speed)def move(speed)
1class Vehicle2 def move(speed1)3 "moving at #{speed1}"4 endputs vehicle.move(speed)
17puts vehicle.move(speed)moving at 118puts bicycle.move(speed)pedaling at 1outputmoving at 1def move(speed)
7class Bicycle < Vehicle8 def move(speed1)9 "pedaling at #{speed1}"10 endputs bicycle.move(speed)
17puts vehicle.move(speed)18puts bicycle.move(speed)pedaling at 1outputpedaling at 1
speed ← 8, vehicle ← ⟨Vehicle A⟩, bicycle ← ⟨Bicycle B⟩
13speed→ 8 = 814vehicle→ ⟨Vehicle A⟩ = Vehicle.new15bicycle→ ⟨Bicycle B⟩ = Bicycle.new1617puts vehicle.move(speed)moving at 818puts bicycle.move(speed)def move(speed)
1class Vehicle2 def move(speed8)3 "moving at #{speed8}"4 endputs vehicle.move(speed)
17puts vehicle.move(speed)moving at 818puts bicycle.move(speed)pedaling at 8outputmoving at 8def move(speed)
7class Bicycle < Vehicle8 def move(speed8)9 "pedaling at #{speed8}"10 endputs bicycle.move(speed)
17puts vehicle.move(speed)18puts bicycle.move(speed)pedaling at 8outputpedaling at 8