As will said, it's about not exposing the underlying implementation, the goal is that we can substitute a new implementation without breaking binary compatibility, exposing a constructor that accepts NingCookie would not allow this.  That said, another way would be to have a private constructor, which I just found out to do this in Scala you do:

```
class Foo private (val bar) {
}
```

traits have multiple purposes in Scala, one is to be an interface.