Каково преимущество использования абстрактных классов вместо черт?

Что преимуществом использования является абстрактный класс вместо черты (кроме производительности)? Кажется, что абстрактные классы могут быть заменены чертами в большинстве случаев.

362
задан Jacek Laskowski 23 December 2014 в 11:31
поделиться

4 ответа

Могу придумать два отличия

  1. Абстрактные классы могут иметь как параметры конструктора, так и параметры типа. Трейты могут иметь только типовые параметры. Обсуждалось, что в будущем даже трейты могут иметь параметры конструктора
  2. Абстрактные классы полностью совместимы с Java. Их можно вызывать из Java-кода без оберток. Трейты полностью взаимозаменяемы только в том случае, если они не содержат никакого кода реализации
363
ответ дан 23 November 2019 в 00:11
поделиться

Абстрактные классы могут содержать поведение - они могут параметризоваться с помощью конструктора args (какие черты не могут) и представлять собой рабочую сущность. Трейты вместо этого представляют единственную особенность, интерфейс одной функциональности.

.
4
ответ дан 23 November 2019 в 00:11
поделиться

При расширении абстрактного класса это показывает, что подкласс является подобным. Думаю, это не обязательно при использовании признаков.

.
9
ответ дан 23 November 2019 в 00:11
поделиться

Как бы то ни было, Одерски и др. Программирование на Scala рекомендуют, когда вы сомневаетесь, использовать черты. При необходимости вы всегда можете изменить их на абстрактные классы позже.

76
ответ дан 23 November 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: