Вы не создаете экземпляр черты.Черты не могут быть созданы.
Вы создаете экземпляр анонимного класса, расширяющего черту.
Как правило,
new __t__
эквивалентно
{ class __anonymous__ extends __t__; new __anonymous__ }
(где __anonymous__
- свежее имя анонимного класса, недоступного для пользовательской программы).
Это подробно описано в разделе 6.10 Выражения создания экземпляра Спецификации языка Scala .
Итак, причина, по которой вы можете создать экземпляр в первом случае, заключается в том, что вы не создаете экземплярпризнак (который является абстрактным), но объект (который не является).
Во втором случае причина, по которой вы не можете создать экземпляр, заключается в том, что если вы наследуете что-то, является ли это признакомили класс, в конечном итоге вам нужно реализовать его абстрактные методы где-нибудь по цепочке наследования, чтобы создать его экземпляр.В первом случае нет абстрактных методов для реализации.
Само ключевое слово abstract
не имеет значения: черты неявно абстрактны, ключевое слово избыточно.