具有相同变量名的 Scala 类继承

标签 scala inheritance

为什么 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

最佳答案

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

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

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

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

关于具有相同变量名的 Scala 类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14705801/

相关文章:

scala - 匹配一对相等的值

scala - Scala如何知道 “def foo”和 “def foo()”之间的区别?

java - super.a = b 而不是 super(b)

python - 从python中的Parent类继承pandas dataframe的属性

c++ - 从 BaseClass* 到 DerivedClass* 的无效转换

Scala:通过 Reflect.runtime.universe.Type 进行模式匹配?

scala - 在scala中我们如何找到每个客户的最新记录?

scala - 如何使用带有 SSL 证书的 Akka 发送 HTTP 请求

swift - Swift 结构的替代继承方法?

java - 在父类(super class)中调用父类(super class)方法