Ok, so I have searched on here for an answer to this question and couldn't find what I was after (in exact terms) so I'm gonna be slightly greedy and ask for some of the communities time. I hope to make my question as applicable as possible.
So, some context, I've been struggling with the idea of classes, class variables and methods for the last week but over the last 2 days have made serious headways in my understanding. However now I am faced with inheritance and can't work out why super would be used when I can just inherit without using it.
def initialize (type, breed, age)
@type = type
@breed = breed
@age = age
class Dog < Animal
class Cat < Animal
woof = Dog.new("dog", "shitzu", 12)
meow = Cat.new("cat", "tabby", 5)
fish = Fish.new("fish", "gold", 2)
=> #<Dog:0x00000001447680 @type="dog", @breed="shitzu", @age=12>
=> #<Cat:0x0000000140c918 @type="cat", @breed="tabby", @age=5>
ArgumentError: wrong number of arguments (given 3, expected 0)
super lets a class override a method that it inherits from its parent and customize it.
For instance, in your example,
Animal - but what if we wanted some special logic for
class Dog < Animal def initialize(type, breed, age) raise "Sorry, dogs don't live that long!" if age > 100 # Everything looks good - let Animal#initialize run now super end end
Dog customize what its initialize method does, but still call through to the original inherited method.