fork download
  1. object Main extends App {
  2. trait A {
  3. def sample: String
  4.  
  5. def stacked: String = "A"
  6. }
  7.  
  8. trait B extends A {
  9. override def sample: String = "Implemented in B"
  10.  
  11. override def stacked: String = super.stacked + "B"
  12. }
  13.  
  14. trait C extends A {
  15. override def sample: String = "Implemented in C"
  16.  
  17. override def stacked: String = super.stacked + "C"
  18. }
  19.  
  20.  
  21. val diamond = new D
  22.  
  23. println(diamond.isInstanceOf[A])
  24. println(diamond.isInstanceOf[B])
  25. println(diamond.isInstanceOf[C])
  26.  
  27. println(diamond.sample)
  28.  
  29. println((new A with C with B).sample)
  30. println((new A with B with C).sample)
  31.  
  32. println((new A with C with B).stacked)
  33. println((new A with B with C).stacked)
  34. println(new A with B with C {
  35. override def stacked: String = super[A].stacked
  36. }.stacked)
  37. println(new A with B with C {
  38. override def stacked: String = super[B].stacked
  39. }.stacked)
  40.  
  41. }
Success #stdin #stdout 0.38s 2181632KB
stdin
Standard input is empty
stdout
true
true
true
Implemented in C
Implemented in B
Implemented in C
ACB
ABC
A
AB