Курс по 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), и изричният аргумент надделява над стойността по подразбиране. Но понеже колелото или автомобилът най-вероятно вече идват с обичайния си брой колела, стойностите по подразбиране държат обичайния случай прост, оставяйки място за случайното изключение.

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

Наследен атрибут   |   Роли