Я не думаю, что любой выбор имеет смысл. Если вы используете абстрактный класс, когда кто-то смотрит на класс, который наследует ваш абстрактный класс, он может изо всех сил пытаться выяснить, где находится эта информация. Вероятно, это худшая часть наследования: где-то скрывать важные детали в классе в цепочке наследования.
Интерфейс является своего рода контрактом, которого должен придерживаться класс, так что, как правило, он может использоваться другим механизмом. Отличным примером является итератор, такому классу обычно требуется метод «next». Вы гарантируете, что экземпляр класса может быть повторен, если он подписывается на интерфейс, который требует, чтобы у него был метод "next". Таким образом, механизм, который хочет перебрать ваш экземпляр, может знать, что он будет работать. Если это не имеет смысла для того, что вы хотите сделать, возможно, не используйте это.