重構現有類以使用繼承

假設我們有兩個類,CatDog

class Cat
  def eat
    die unless has_food?
    self.food_amount -= 1
    self.hungry = false
  end
  def sound
    puts "Meow"
  end
end

class Dog
  def eat
    die unless has_food?
    self.food_amount -= 1
    self.hungry = false
  end
  def sound
    puts "Woof"
  end
end

eat 方法在這兩個類中完全相同。雖然這有效,但很難維護。如果有更多的動物使用相同的 eat 方法,問題會變得更糟。繼承可以解決這個問題。

class Animal
  def eat
    die unless has_food?
    self.food_amount -= 1
    self.hungry = false
  end
  # No sound method
end

class Cat < Animal
  def sound
    puts "Meow"
  end
end

class Dog < Animal
  def sound
    puts "Woof"
  end
end

我們建立了一個新類 Animal,並將我們的 eat 方法移動到該類。然後,我們讓 CatDog 繼承了這個新的常見超類。這消除了重複程式碼的需要