Наша класифікація об'єктів у кожному дні життя є насправді ієрархічною. Ми знаємо, що всі кішки ссавці, а всі ссавці є тваринами. Найменші класи успадковують характеристики великих класів, яких вони належать. Якщо всі ссавці дихають, то всі кішки також дихають.
Ми можемо висловити цю концепцію в Ruby:
ruby> class Mammal | def breathe | print "inhale and exhale\n" | end | end nil ruby> class Cat<Mammal | def speak | print "Meow\n" | end | end nil
Хоча ми не вказуємо, як Cat повинен дихати, кожна кішка буде успадковувати цю поведінку від класу Mammal, з тих пір, як Cat був визначений підкласом Mammal. (В об'єктно-орієнтованій термінології менший клас є підкласом більшого класу, що є суперкласом) З точки зору програміста, кішки отримують здатність дихати безкоштовно, а після того, як ми додамо метод * Speak, * наші кішки зможуть дихати і говорити одночасно.
ruby> tama = Cat.new #<Cat:0xbd80e8> ruby> tama.breathe inhale and exhale nil ruby> tama.speak Meow nil
Можуть бути ситуації, де деякі властивості суперкласів не повинні успадковуватись певним підкласом. Хоча птахи, як правило, знають як літати, але пінгвіни є підкласом птахів, що не літають.
ruby> class Bird | def preen | print "I am cleaning my feathers." | end | def fly | print "I am flying." | end | end nil ruby> class Penguin<Bird | def fly | fail "Sorry. I'd rather swim." | end | end nil
Замість того, щоб визначати всі властивості кожного нового класу, ми повинні тільки додати або перевизначити різницю між підкласом і суперкласом. Таке використання успадкування іноді називають диференціальним програмуванням. Це одна з переваг об'єктно-орієнтованого програмування.