abstract class Atest(val data: String)

case class Btest(override val data: String, val b: Boolean) extends Atest(data)

case class Ctest(override val data: String) extends Btest(data, true)

class testCaseClass {
  def test(x: Atest) = x match {
    case Ctest(data) => Console.println("C")  
    case Btest(data, b) => Console.println("B")
  }
}
