0

I am learning scala, so bear with me if this a stupid question. I am experimenting with case classes and trying out the following:-

case class A {
    def eval(x: Int): Boolean
}

case class B extends A

case class C extends A {
    override def eval(x: Int): Boolean = true
    // Compiler error is - 
    // Multiple markers at this line
    // - Missing closing brace `}' assumed here
    // - expected start of definition
}

Is it not possible for case classes to implement abstract methods?

4

2 回答 2

3

一个案例类不能继承另一个案例类(编译器做了很多魔术)。在 scala 中,您通常会使用特征,因此您的代码如下所示:

trait A {
  def eval(x: Int): Boolean
}

case class C() extends A {
  override def eval(x: Int): Boolean = true
}
于 2013-03-27T14:02:40.850 回答
0

abstract case class是自相矛盾的。不建议从 a 进行扩展,case class并且通过制作一个case class抽象,您被迫对其进行子类化以拥有一个可实例化的类。

常见的模式是一个abstract classtrait作为基础,一个或多个(通常不止一个)case classes总是在继承树的叶子上

于 2013-03-27T14:01:23.133 回答