classAnimaldefspeak"please override me"endendclassDog< Animaldefspeak# I don't like the parent's speak, so override it
"ruff ruff"endendclassDuck< Animaldefspeak"quack quack"endend
animals =[Dog.new,Duck.new,Dog.new,Dog.new,Duck.new]#notice here, we don't care what type animal is, all I care about
#is that it has the ability to speak
animals.each do |animal|
puts "#{animal.class} (#{animal.object_id}): #{animal.speak}"endclassZooattr_reader:animalsdefinitialize@animals=[]enddefadd_animal(animal)@animals<< animal
enddefmake_a_raucus@animals.each {|animal| puts animal.speak}endend