class Value[+T](x: T) { def value = x } trait PlusOne extends Value[Int] { override def value = super.value + 1 } object Test extends App { object boom extends Value[java.lang.String]("foo") with PlusOne println(boom.value) // class cast exception! }