Inheritance and Modules
Inheritance Basics
A subclass can reuse behavior defined by a parent class.
inheritance
Inheritance lets one class receive methods from another class.
Inheritance Basics
inheritance_basics.rb
Replay: real traced execution (multi-file project)
class Animal
def initialize(name)
@name = name
end
def label
"animal #{@name}"
end
end
class Dog < Animal
end
name = "Ruby"
dog = Dog.new(name)
puts dog.label
class Animal
def initialize(name)
@name = name
end
def label
"animal #{@name}"
end
end
class Dog < Animal
end
name = "Ada"
dog = Dog.new(name)
puts dog.label
class Animal
def initialize(name)
@name = name
end
def label
"animal #{@name}"
end
end
class Dog < Animal
end
name = "Matz"
dog = Dog.new(name)
puts dog.label
name ← Ruby
14name→ Ruby = "Ruby" #@name="Ada", "Matz"15dog = Dog.new(nameRuby)@name ← Ruby
1class Animal2 def initialize(nameRuby)3 @name→ Ruby = nameRuby4 enddog ← ⟨Dog A @name="Ruby"⟩
14name = "Ruby" #@name="Ada", "Matz"15dog→ ⟨Dog A @name="Ruby"⟩ = Dog.new(nameRuby)1617puts dog.labelanimal Rubydef label
6def label7 "animal #{@nameRuby}"8endputs dog.label
17puts dog.labelanimal Rubyoutputanimal Ruby
name ← Ada
14name→ Ada = "Ada"15dog = Dog.new(nameAda)@name ← Ada
1class Animal2 def initialize(nameAda)3 @name→ Ada = nameAda4 enddog ← ⟨Dog A @name="Ada"⟩
14name = "Ada"15dog→ ⟨Dog A @name="Ada"⟩ = Dog.new(nameAda)1617puts dog.labelanimal Adadef label
6def label7 "animal #{@nameAda}"8endputs dog.label
17puts dog.labelanimal Adaoutputanimal Ada
name ← Matz
14name→ Matz = "Matz"15dog = Dog.new(nameMatz)@name ← Matz
1class Animal2 def initialize(nameMatz)3 @name→ Matz = nameMatz4 enddog ← ⟨Dog A @name="Matz"⟩
14name = "Matz"15dog→ ⟨Dog A @name="Matz"⟩ = Dog.new(nameMatz)1617puts dog.labelanimal Matzdef label
6def label7 "animal #{@nameMatz}"8endputs dog.label
17puts dog.labelanimal Matzoutputanimal Matz