Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Классы и объекты / Наследование / Exercises / Унаследованный атрибут

Решение: Унаследованный атрибут

Вот один из возможных вариантов решения задачи.

Код

class Vehicle {
    has $.wheels;
}

class Bike is Vehicle {
    has $.wheels = 2;
}

class Car is Vehicle {
    has $.wheels = 4;
}

say Bike.new.wheels;
say Car.new.wheels;

🦋 Исходный код можно найти в файле inherited-attribute.raku.

Вывод

2
4

Комментарии

  1. И Bike, и Car наследуют атрибут wheels (вместе с его аксессором) от Vehicle. Ни один из них не объявляет атрибут заново — они лишь задают унаследованному значение по умолчанию, 2 и 4 соответственно.

  2. Поскольку значение по умолчанию заложено в каждый класс, объекты можно создавать простыми Bike.new и Car.new, а унаследованный аксессор считывает нужное число колёс.

  3. Значение всё ещё можно передать явно, например Car.new(wheels => 3), и явный аргумент переопределяет значение по умолчанию. Но поскольку у велосипеда или автомобиля скорее всего уже есть привычное число колёс, значения по умолчанию упрощают обычный случай, оставляя место для редких исключений.

Навигация по курсу

Унаследованный атрибут   |   Роли