Я юзал абстрактные классы пару раз, но так и не понял зачем они нужны) Хватало не абстрактных и интерфейсов чтобы их имплементить
Абстракктные классы просто не актуальны, если ты пишешь серверный бэк, либо фронт. Когда ты пишешь библиотеку какую-нить, это просто маст-хэв. Их отличие от интерфейсов в том, что они могут содержать в себе реализацию.
Поэтому если у тебя есть какая-нить базовая сущность, от которой экстендится много других сущностей, но базовая сама по себе не может иметь инстанс - то это абстрактный класс