3

为什么 scala 抱怨下面的代码?

scala> class Http(var status: Int)
defined class Http

scala> case class Post(url: String, data: String, status: Int) extends Http(status)
<console>:8: error: overriding variable status in class Http of type Int;
 value status needs `override' modifier
       case class Post(url: String, data: String, status: Int) extends Http(status)
                                                  ^

scala> case class Post(url: String, data: String, sta: Int) extends Http(sta)
defined class Post

但这运行良好。

scala> class C(boo:Int)
defined class C

scala> case class D(far:Int, boo:Int) extends C(boo)
defined class D
4

2 回答 2

5

var status: Int将创建访问器方法,例如

def status() = this.status
def status(status: Int) {this.status = status}

case 类默认创建这些方法,因此您有两个具有相同签名的方法,而 scala 要求您override在覆盖方法时添加关键字。

没有var你只创建类字段,它们不会被覆盖。

于 2013-02-05T11:07:23.440 回答
0

我认为 Http 类必须有一个状态值

所以 :

scala> class Http(val status: Int)
defined class Http

scala> case class Post(url: String, data: String, override val status: Int) extends Http(status)
defined class Post
于 2013-02-05T11:01:14.510 回答