Курс Raku / Додаток 🆕 / Типи та текстові машини / Об’єкти та класи / Вправи / Тварини, що говорять
Розв’язання: Тварини, що говорять
Ось одне з можливих розв’язань задачі.
Код
class Animal {
has $.name;
method speak { '...' }
method greet { "{$.name} says {self.speak}" }
}
class Dog is Animal { method speak { 'Woof' } }
class Cat is Animal { method speak { 'Meow' } }
for Dog.new(name => 'Rex'), Cat.new(name => 'Tom') -> $pet {
say $pet.greet;
}🦋 Знайдіть програму у файлі animal-inheritance.raku.
Вивід
Rex says Woof
Tom says MeowКоментарі
greetозначено один раз у базовому класі, але він викликаєself.speak. Оскількиselfє справжнім об’єктом, виклик дістає власнийspeakпідкласу.Це поліморфізм: той самий
greetдаєWoofдля собаки йMeowдля кота без жодного умовного коду.