With inheritance in ruby we can share parent class behavior to child classes. We can also override these methods in child classes.
A built-in function called super is provided by Ruby. This method allows us to call methods up the inheritance hierarchy. When super is called from within a method, it will search the inheritance hierarchy for a method by the same name and then invoke it.
class Vehicle
attr_accessor :model, :company
def initialize(model , company)
@model = model
@company = company
end
def top_speed
100
end
end
class Car < Vehicle
def top_speed
150
end
end
class Bike < Vehicle
def top_speed
# passes execution to super class method
super
end
end
car = Car.new("Civic", "Honda")
car.top_speed # => 150
bike = Bike.new("Pulsar", "Bajaj")
bike.top_speed # => 100
In have classes we have Vehicle super class. Car and Bike classes are inheriting from Vehicle. In child classes we have overridden "top_speed" methods. If you noticed in Bike class we have used super in method "top_speed", it class super class method and returns value 100.
Lets pass parameter using super:
class Vehicle
attr_accessor :model, :company
def initialize(model , company)
@model = model
@company = company
end
def top_speed
100
end
end
class Car < Vehicle
attr_reader :color, :engine
def initialize( engine, color , model , company)
@engine = engine
@color = color
super(model, company)
end
def top_speed
150
end
end
Here in our Car class we have added two more properties engine and color. We will pass model and company parameters in super.
car = Car.new("petrol", "red", "civic", "honda")
car.color # => "red"
car.company # => "honda"
0 Comment(s)