Абстрактный класс — средство разработки классов на нижнем уровне, средство для повторного использования кода; интерфейс — средство выражения семантики класса. Таким образом, это совершенно разные, мало связанные между собой понятия.
Т.е. интерфейс нужен для описания доступных снаружи публичных методов. Используя программу программист смотрит на интерфейс доступных методов - это оно и есть, описание. Абстрактный класс нужен для внутренних нужд, когда много классов с частично одинаковой функциональностью, например. Абстрактные классы не смотрят наружу, как интерфейсы и недоступны другим программам при использовании. См. принципы организации "черного ящика"