Виртуальные методы

Они реализуют концепцию полиморфизма.
Полиморфизм - это возможность с одинаковый спецификацией иметь различную реализацию. Один интерфейс - множество реализаций.
Создадим новый метод Volume в классе TBar (перекрывающий, унаследованный). Добавим в описание класса функцию function  TBar.Volume:word. В этом случае результат будет одинаковый. Два раза будет вызван метод Show базового класса.
С функцией Show для объекта Par1 все как планировалось. А в случае с вызовом метода Show для объекта Par1 по причине раннего связывания объектов вызывается метод Volume родительского класса. Вызов Volume в методе Show установлен раз и навсегда по версии, определённой в базовом классе. Компилятор ничего не знает о других методах Volume. То есть в данном случае связь между Volume и Show происходит на этапе компиляции (раньше, чем выполняется сама программа). Для того, чтобы выбор метода не был фиксирован и производился во время работы программы применяется позднее или динамическое связывание. Оно основано на виртуальных механизмах. Необходимо объявить в базовом классе метод Volume виртуально. Это делается добавлением ключевого слова virtual. Данную функцию переопределяем с помощью ключевого слова override.
Класс-потомок может переопределить любой их унаследованных классов.

Комментарии

Популярные сообщения