Разница между модификаторами virtual и abstract при наследовании заключается в следующем:
- Виртуальный метод предоставляет реализацию по умолчанию, которую производные классы могут переопределить и адаптировать под свои конкретные нужды. 1 Он может быть объявлен как в абстрактном, так и в неабстрактном классе. 3
- Абстрактный метод не имеет реализации по умолчанию и может быть объявлен только в абстрактном классе. 13 Он служит заполнителем и требует от производного класса предоставить свою конкретную функциональность. 1
Таким образом, виртуальные методы могут быть переопределены, а абстрактные — должны быть. 4
Также класс с хотя бы одним абстрактным методом сам должен быть абстрактным, то есть его нельзя создать напрямую, так как реализация частично отсутствует. 4