Виртуальные и абстрактные почти то же самое. Виртуальный метод имеет реализацию в базовом классе, который необязательно может быть переопределен, тогда как абстрактный метод не имеет значения, а должен быть переопределен в дочернем классе. В противном случае они одинаковы. Выбор между ними зависит от ситуации. Если вы получили базовую реализацию, вы используете виртуальную. Если вы этого не сделаете, и вам нужно, чтобы каждый потомок реализовал его для себя, вы выбираете абстрактный.
Методы интерфейса - это реализации метода, объявленного в интерфейсе, реализуемом классом. Это совершенно не связано с двумя другими. Я думаю, что метод может быть как виртуальным, так и интерфейсом. Преимущество интерфейсов заключается в том, что вы объявляете один интерфейс (duh), который может быть реализован двумя совершенно разными классами. Таким образом, вы можете запустить тот же код на двух разных классах, если методы, которые вы хотите вызвать, объявляются в интерфейсе, который они разделяют.
@ Downvoter: что случилось с вопросом? Не стоит задавать этот вопрос? – Nawaz