A subclass can reuse behavior defined by a parent class.

inheritance Inheritance lets one class receive methods from another class.

Inheritance Basics

name
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
  1. name ← Ruby

    14name→ Ruby = "Ruby"  #@name="Ada", "Matz"15dog = Dog.new(nameRuby)
  2. @name ← Ruby

    1class Animal2  def initialize(nameRuby)3    @name→ Ruby = nameRuby4  end
  3. dog ← ⟨Dog A @name="Ruby"⟩

    14name = "Ruby"  #@name="Ada", "Matz"15dog→ ⟨Dog A @name="Ruby"⟩ = Dog.new(nameRuby)1617puts dog.labelanimal Ruby
  4. def label

    6def label7  "animal #{@nameRuby}"8end
  5. puts dog.label

    17puts dog.labelanimal Ruby
    outputanimal Ruby
  1. name ← Ada

    14name→ Ada = "Ada"15dog = Dog.new(nameAda)
  2. @name ← Ada

    1class Animal2  def initialize(nameAda)3    @name→ Ada = nameAda4  end
  3. dog ← ⟨Dog A @name="Ada"⟩

    14name = "Ada"15dog→ ⟨Dog A @name="Ada"⟩ = Dog.new(nameAda)1617puts dog.labelanimal Ada
  4. def label

    6def label7  "animal #{@nameAda}"8end
  5. puts dog.label

    17puts dog.labelanimal Ada
    outputanimal Ada
  1. name ← Matz

    14name→ Matz = "Matz"15dog = Dog.new(nameMatz)
  2. @name ← Matz

    1class Animal2  def initialize(nameMatz)3    @name→ Matz = nameMatz4  end
  3. dog ← ⟨Dog A @name="Matz"⟩

    14name = "Matz"15dog→ ⟨Dog A @name="Matz"⟩ = Dog.new(nameMatz)1617puts dog.labelanimal Matz
  4. def label

    6def label7  "animal #{@nameMatz}"8end
  5. puts dog.label

    17puts dog.labelanimal Matz
    outputanimal Matz