Курс языка программирования Raku / Приложение 🆕 / Типы и текстовые машины / Объекты и классы / Exercises / Говорящие животные
Решение: Говорящие животные
Вот один из возможных вариантов решения задачи.
Код
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для кошки без всякого условного кода.