Объектно-ориентированное программирование
Уроки Открыть IDE
На главную
ООП • Урок 9

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

Как потомок может изменить поведение унаследованного метода

Что такое переопределение?

Переопределение метода — это возможность потомка дать свою реализацию метода, который уже существует в родительском классе.

Простыми словами: родитель говорит «все животные издают звук», но потомок решает, какой именно звук он будет издавать.

Пример: животные и их голоса

Создадим класс Animal с методом speak(), который просто выводит многоточие. А затем создадим потомков, которые переопределят этот метод:

Рекс гавкнул: Woof! Мурка мяукнул: Meow!

Обратите внимание: метод speak() объявлен в классе Animal, но каждый потомок дал свою реализацию. При вызове у объекта вызывается его собственная версия метода.

Если метод не переопределён

Если потомок не переопределяет метод, используется версия из родительского класса:

...

Вызов родительского метода из потомка

В переопределённом методе потомка можно вызвать оригинальный метод родителя с помощью parent.метод():

Я собака

Важное ограничение

В Idyllium нет неявного приведения дочернего типа к родительскому. Это означает, что следующий код не сработает:

main.idyl: error: cannot convert 'Dog' to 'Animal'

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

Итог

  • Переопределение методов — это когда потомок даёт свою реализацию метода родителя.
  • Если метод не переопределён — используется версия из родительского класса.
  • В Idyllium нет неявного приведения дочернего типа к родительскому — каждый объект строго сохраняет свой тип.