Technically, you cannot instantiate a single trait or multiple mixed traits directly, but the compiler uses some syntactic sugar, which allows you to create anonymous classes that extend them. Say we have:
trait A trait B
When you call new A with B , what really happens, the compiler creates an anonymous class that mixes in both A and B You are getting:
final class $anon extends A with B new $anon()
When you call new A {} , the same thing happens. You get an anonymous class that extends A :
final class $anon extends A new $anon()
The only difference is syntactic. When creating an anonymous class from one attribute, you must at least use curly braces {} to distinguish it from the class. That is, it is easier to determine if a template can be constructed, or must be completed in an anonymous class to be created. With several attributes (or even a class with mixed attributes), the compiler realizes that he always needs to create an anonymous class first.
Summarizing:
class C new A {}
source share