Что преимуществом использования является абстрактный класс вместо черты (кроме производительности)? Кажется, что абстрактные классы могут быть заменены чертами в большинстве случаев.
Могу придумать два отличия
Абстрактные классы могут содержать поведение - они могут параметризоваться с помощью конструктора args (какие черты не могут) и представлять собой рабочую сущность. Трейты вместо этого представляют единственную особенность, интерфейс одной функциональности.
.При расширении абстрактного класса это показывает, что подкласс является подобным. Думаю, это не обязательно при использовании признаков.
.Как бы то ни было, Одерски и др. Программирование на Scala рекомендуют, когда вы сомневаетесь, использовать черты. При необходимости вы всегда можете изменить их на абстрактные классы позже.