casualjim
1/30/2012 - 3:58 PM

console.txt

scala> trait A { private lazy val a = 3 }; abstract class B { lazy val a = "a" }; class C extends B with A; (new C).a
<console>:9: error: lazy value a in trait A cannot be accessed in C
        (new C).a
                ^

scala> trait A { private lazy val a = 3 }; abstract class B { lazy val a = "a" }; class C extends B with A; 
<console>:7: error: overriding lazy value a in class B of type java.lang.String;
 lazy value a in trait A of type Int has weaker access privileges; it should not be private
       trait A { private lazy val a = 3 }; abstract class B { lazy val a = "a" }; class C extends B with A; 
                                                                                        ^

scala> trait A { private lazy val a = 3 }; abstract class B { lazy val a = "a" }; 
defined trait A
defined class B

scala> (new B with A).a
res1: java.lang.String = a

scala> class C extends B with A
defined class C

scala> (new C).a
res2: java.lang.String = a
scala> trait A {
     | private val a = "a"
     | private lazy val b = "b"
     | private def c = "c"
     | private var d = "d"
     | }
defined trait A

scala> abstract class B {
     | val a = "aa"
     | lazy val b = "bb"
     | def c = "c"
     | var d = "dd"
     | }
defined class B

scala> class C extends B with A
<console>:9: error: overriding method c in class B of type => java.lang.String;
 method c in trait A$class of type => java.lang.String has weaker access privileges; it should not be private
       class C extends B with A
             ^

scala> trait AA {
     | private val a = "a"
     | def bbb ="bbb"
     | }
defined trait AA

scala> class D extends B with AA
defined class D

scala> trait BB {
     | private lazy val b = "b"
     | }
defined trait BB

scala> class E extends B with BB
defined class E

scala> trait CC {
     | private def c = "c"
     | def ccc = "ccc"
     | }
defined trait CC

scala> class F extends B with CC
<console>:9: error: overriding method c in class B of type => java.lang.String;
 method c in trait CC$class of type => java.lang.String has weaker access privileges; it should not be private
       class F extends B with CC
             ^

scala> trait DD {
     | private var d = "d"
     | def ddd = "ddd"
     | }
defined trait DD

scala> class G extends B with DD
defined class G


scala> trait BB {
     | private val b = 2
     | }
defined trait BB

scala> abstract class B {
     | val b = "two"
     | }
defined class B

scala> new B with BB
res0: B with BB = $anon$1@461014

scala> res0.b
res1: java.lang.String = two

scala> trait CC {
     | private lazy val a = 33
     | }
defined trait CC

scala> abstract class C {
     | lazy val a = "thirty three"
     | }
defined class C

scala> new C with CC
res2: C with CC = $anon$1@7742683

scala> res2.a
res3: java.lang.String = thirty three