Курс Raku / Об’єкти, введення-виведення та винятки / Класи та об’єкти / Успадкування / Вправи / Успадкований атрибут

Розв’язання: Успадкований атрибут

Ось один із можливих варіантів розв’язання задачі.

Код

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), і явний аргумент перекриває типове значення. Але, оскільки велосипед чи автомобіль найімовірніше вже мають звичну для себе кількість коліс, типові значення тримають поширений випадок простим, лишаючи місце для випадкових винятків.

Навігація курсом

Успадкований атрибут   |   Ролі