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

Переопределение методов

Дочерний класс может предоставить собственную версию унаследованного метода. Это называется переопределением. Когда метод вызывается у объекта дочернего класса, выполняется версия потомка, а не родителя.

class Animal {
    has $.name;
    method speak {
        'some sound';
    }
    method intro {
        "$.name says " ~ self.speak;
    }
}

class Dog is Animal {
    method speak {
        'Woof';
    }
}

class Cat is Animal {
    method speak {
        'Meow';
    }
}

Dog и Cat каждый переопределяют speak. Метод intro, унаследованный от Animal без изменений, вызывает self.speak — и этот вызов использует тот speak, который принадлежит самому объекту:

say Dog.new(name => 'Rex').intro; # Rex says Woof
say Cat.new(name => 'Tom').intro; # Tom says Meow

Итак, один и тот же унаследованный intro даёт разные результаты, потому что каждый объект приносит собственный speak. Это одна из центральных идей объектно-ориентированного программирования: общий код, который подстраивается под конкретный вид объекта, с которым работает.

Практика

Пройдите 1 тест по содержанию этой темы.

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

Наследование   |   Тест — Наследование


💪 Или перейдите сразу к упражнениям этого раздела.