Всякий раз, когда я создаю абстрактный класс, я стремлюсь создать интерфейс, чтобы согласиться с ним, и чтобы другой код ссылался на интерфейс, а не на абстрактный класс. Обычно, когда я не создаю интерфейс для начала, я сожалею об этом (например, о необходимости переопределить все подразумеваемые методы, чтобы заглушить класс для модульного тестирования или позже в строке), новые классы не нуждаются в имплиментации и также переопределяют все оказавшись не в состоянии продлить какой-либо другой класс).
Сначала я пытался различить, когда использовать интерфейс, а когда использовать абстрактный класс, рассматривая возможность «против», но я все равно в конечном итоге буду страдать от того, что не сделал интерфейс для начала.
Итак, вопрос в том, когда хорошая идея иметь только абстрактный класс и вообще никакого интерфейса?