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クラスはデフォルトでこれらのメソッドを作成するため、同じシグネチャを持つ2つのメソッドがあり、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 に答える