Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Классы и объекты / Наследование / Exercises / Сотрудники и роли
Решение: Сотрудники и роли
Вот один из возможных вариантов решения задачи.
Код
class Employee {
has $.name;
method role {
'staff';
}
method badge {
"$.name - " ~ self.role;
}
}
class Manager is Employee {
method role { 'manager' }
}
class Intern is Employee {
method role { 'intern' }
}
say Manager.new(name => 'Anna').badge;
say Intern.new(name => 'Bob').badge;🦋 Исходный код можно найти в файле dog-and-cat.raku.
Вывод
Anna - manager
Bob - internКомментарии
ManagerиInternнаследуют отEmployeeатрибутnameи методbadge, поэтому ни одному из них не нужно повторять этот код.Каждый потомок переопределяет
role. Посколькуbadgeвызываетself.role, он подхватывает переопределённую версию, принадлежащую конкретному объекту, и бейджи менеджера и стажёра получаются разными.Имя метода
role— всего лишь имя. Но оно совпадает с ключевым словомrole, которое будет введено позже.