If your only concern about making it val is visibility, you can simply make val this way:
scala> trait D { protected val d:Int | def dd = d | } defined trait D scala> class C(protected val d:Int) extends D defined class C scala> new C(1) res0: C = C@ba2e48 scala> res0.d <console>:11: error: value d in class C cannot be accessed in C Access to protected value d not permitted because enclosing class object $iw in object $iw is not a subclass of class C in object $iw where target is defined res0.d ^ scala> res0.dd res2: Int = 1
Kim stebel
source share