Все ответы пока выглядят довольно хорошо для меня. Я думал, что просто упомяну, что все наследование не является абсолютно необходимым. Исключая поведение «сна» на мгновение, мы можем достичь желаемого результата, используя типизацию по уткам и исключая необходимость вообще создавать базовый класс Animal. Поиск в Google для «типизации утки» должен дать любое количество объяснений, так что здесь давайте просто скажем «если он ходит как утка и крякает как утка ...»
Поведение "сна" может быть обеспечено с помощью модуля mixin, такого как Array, Hash и другие встроенные классы Ruby, включая Enumerable. Я не предполагаю, что это обязательно лучше, просто другой, и, возможно, более идиоматически, Ruby способ сделать это.
module Animal
def sleep
puts self.class.name + " sleeps"
end
end
class Dog
include Animal
def make_noise
puts "Woof"
end
end
class Cat
include Animal
def make_noise
puts "Meow"
end
end
Ты знаешь все остальное ...