Override/Vitual/Dynamic - методы

Материал из DRKB

Override/Vitual/Dynamic - методы[править | править код]

Если метод в классе предка объявлен как виртуальный (virtual) или динамический (dynamic), вам необходимо перекрыть его во всех классах-наследниках. Если вы объявляете унаследованный метод виртуальным или динамическим, вы начинаете строить его новое виртуальное/динамическое дерево наследования. Допустим, у нас есть следующая иерархия: A (родитель) - B - C - D. Если вы объявляете метод как виртуальный (или динамический) в A, перекрываете в B, создаете виртуальным в C и перекрываете в D, вот что получается:


 фактический  класс, используемый   класс, использующий
 класс        для доступа к методу  метод
 -----------+---------------------+--------------------
      D                D                     D
      D                C                     D
      D                B                     B
      D                A                     B
 
      C                C                     C
      C                B                     B
      C                A                     B
 
      B                B                     B
      B                A                     B

Вывод: работа виртуального/динамического наследования прекращается в момент создания одноименного виртуального/динамического метода наследниками класса.


Author: Mark
Source: из Советов по Delphi от Валентина Озерова, Сборник Kuliba
ID: 00115