объяснение: с аналогиями. надеюсь, это поможет вам.
Context
Я работаю на 21 этаже здания. И я параноик по поводу огня. Время от времени, где-то в мире, огонь сжигает небоскреб. Но, к счастью, у нас где-то есть инструкция, что делать в случае пожара:
FireEscape ()
- Не собирай вещи
- Прогулка к пожарной лестнице
- Выйти из здания
Это в основном виртуальный метод, называемый FireEscape ()
Виртуальный метод
Этот план довольно хорош для 99% обстоятельств. Это основной план, который работает. Но есть 1% -ная вероятность того, что пожарный выход заблокирован или поврежден, и в этом случае вы полностью облажаетесь, и вы станете тостом, если не предпримете решительных действий. С помощью виртуальных методов вы можете сделать это: вы можете переопределить базовый план FireEscape () своей собственной версией плана:
- Запуск до окна
- выпрыгнуть в окно
- Парашют благополучно на дно
Другими словами виртуальные методы предоставляют базовый план, который можно переопределить, если вам нужно . Подклассы могут переопределять виртуальный метод родительского класса, если программист сочтет это целесообразным.
Абстрактные методы
Не все организации хорошо подготовлены. Некоторые организации не проводят пожарные учения. У них нет общей политики побега. Каждый мужчина для себя. Руководство заинтересовано только в такой политике, существующей.
Другими словами, каждый человек вынужден разработать свой собственный метод FireEscape (). Один парень выйдет из пожарной лестницы. Другой парень будет прыгать с парашютом. Другой парень будет использовать технологию ракетного двигателя, чтобы улететь от здания. Другой парень спустится. Руководству все равно, как вам удастся уйти, если у вас есть базовый план FireEscape () - если вы этого не сделаете, вам гарантировано, что OHS обрушится на организацию, как тонна кирпичей. Это то, что подразумевается под абстрактным методом.
В чем разница между этими двумя?
Абстрактный метод: подклассы заставили реализовать собственный метод FireEscape. При использовании виртуального метода вас ждет базовый план, но вы можете выбрать , чтобы реализовать свой собственный , если он недостаточно хорош.
Теперь это было не так сложно, правда?