Казалось бы, они тоже дают в нагрузку некие контракты, но почему-то контракт от абстрактного класса мы наследуем одним словом, а от такой же контракт, но от интерфейса — другим 🤷♂️
Наверняка можно встретить и противоположное отклонение — когда народ пишет код в интерфейсе (с помощью default implementations), и делает вид, что это обычный базовый класс.