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