Виртуальные методы
Они реализуют концепцию полиморфизма.
Полиморфизм - это возможность с одинаковый спецификацией иметь различную реализацию. Один интерфейс - множество реализаций.
Создадим новый метод Volume в классе TBar (перекрывающий, унаследованный). Добавим в описание класса функцию function TBar.Volume:word.
В этом случае результат будет одинаковый. Два раза будет вызван метод Show базового класса.
С функцией Show для объекта Par1 все как планировалось. А в случае с вызовом метода Show для объекта Par1 по причине раннего связывания объектов вызывается метод Volume родительского класса. Вызов Volume в методе Show установлен раз и навсегда по версии, определённой в базовом классе. Компилятор ничего не знает о других методах Volume. То есть в данном случае связь между Volume и Show происходит на этапе компиляции (раньше, чем выполняется сама программа). Для того, чтобы выбор метода не был фиксирован и производился во время работы программы применяется позднее или динамическое связывание. Оно основано на виртуальных механизмах. Необходимо объявить в базовом классе метод Volume виртуально. Это делается добавлением ключевого слова virtual. Данную функцию переопределяем с помощью ключевого слова override.
Класс-потомок может переопределить любой их унаследованных классов.
Полиморфизм - это возможность с одинаковый спецификацией иметь различную реализацию. Один интерфейс - множество реализаций.
Создадим новый метод Volume в классе TBar (перекрывающий, унаследованный). Добавим в описание класса функцию function TBar.Volume:word.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function TBar.Volume: word; | |
begin | |
result:=Fa*Fb*Fe*100; | |
end; | |
//Обработчик события | |
Par1:=TParalllel.Create(1,2,3); | |
Par1.Show; | |
Par1:=TBar.Create(1,2,3, 10,5); | |
Par1.Show; |
С функцией Show для объекта Par1 все как планировалось. А в случае с вызовом метода Show для объекта Par1 по причине раннего связывания объектов вызывается метод Volume родительского класса. Вызов Volume в методе Show установлен раз и навсегда по версии, определённой в базовом классе. Компилятор ничего не знает о других методах Volume. То есть в данном случае связь между Volume и Show происходит на этапе компиляции (раньше, чем выполняется сама программа). Для того, чтобы выбор метода не был фиксирован и производился во время работы программы применяется позднее или динамическое связывание. Оно основано на виртуальных механизмах. Необходимо объявить в базовом классе метод Volume виртуально. Это делается добавлением ключевого слова virtual. Данную функцию переопределяем с помощью ключевого слова override.
Класс-потомок может переопределить любой их унаследованных классов.
Комментарии
Отправить комментарий