Курс по 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за котка без никакъв условен код.