Курс Raku / Об’єкти, введення-виведення та винятки / Класи та об’єкти / Успадкування / Вправи / Працівники та ролі
Розв’язання: Працівники та ролі
Ось один із можливих варіантів розв’язання задачі.
Код
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успадковують атрибутnameі методbadgeвідEmployee, тож жодному з них не потрібно повторювати цей код.Кожна дитина перевизначає
role. Оскількиbadgeвикликаєself.role, він підхоплює перевизначену версію, що належить справжньому об’єктові, даючи різні бейджі для менеджера та стажера.Ім’я методу,
role, є просто іменем. Але воно збігається з ключовим словомrole, яке буде введено пізніше.