Ну,
trait A {
class Lala protected()
new Lala
}
тоже не компилируется.Сообщение об ошибке кажется довольно разумным:
error: constructor Lala in class Lala cannot be accessed in trait A
Access to protected constructor Lala not permitted because
enclosing class trait A in object $iw is not a subclass of
class Lala in trait A where target is defined
Защищенный доступ означает, что вы можете получить доступ к этому конструктору только из этого класса или подклассов.Вы пытаетесь назвать это из черты вложения.Одна вещь, которую вы можете сделать, это:
trait B extends A {
class Gaga extends Lala
new Gaga
}
Я бы не ожидал, что ваш третий пример будет компилироваться по тем же причинам.
Также обратите внимание на разницу между защищенным конструктором и protected class
.Так, например:
trait A {
protected class P
class U // unprotected
}
class B extends A {
new P // OK
new U // OK
}
val b = new B
new b.P // error
new b.U // OK