З технічної точки зору, відмінності насправді не є істотними, але, концептуально, вони абсолютно різні речі, що призводить до технічних відмінностей, про які згадували інші.
Абстрактний суперклас - це саме те, що звучить, це загальний тип, який поділяють багато інших типів, наприклад, Кішки та Собаки - тварини.
Інтерфейс - це саме те, що звучить, це інтерфейс, за допомогою якого інші класи можуть спілкуватися з об’єктом. Якщо ви хочете зробити Cat Walk, ви все в порядку, тому Cat реалізує інтерфейс CanWalk. Те саме для Ящірки, хоча вони ходять дуже інакше. Змія, з іншого боку, не реалізує CanWalk, тому ви не можете сказати це Walk. Тим часом ящірки та змія (або, можливо, більш чіткі підкласи - я не експерт), можуть як пролити шкіру, так і реалізувати CanShed, тоді як Кіт цього не зміг зробити.
Але вони все ще Тварини і мають деякі загальні властивості, наприклад, живі чи мертві.
Ось чому всі методи в інтерфейсі повинні бути реалізовані як загальнодоступні (або явно, в C #). Тому що сенс в інтерфейсі, прихованому від класу, що взаємодіє з об'єктом? Це також, чому ви можете мати кілька інтерфейсів для об'єкта, навіть коли мова не підтримує множинне успадкування.
Щоб повернутися до свого питання, коли ви дивитесь на це таким чином, дуже рідко є причина мати абсолютно абстрактний суперклас.