处理特征中的相同变量

时间:2014-07-16 13:02:25

标签: scala traits

如果我写这样的话:

trait foo {
    val a: Int
}

trait bar extends foo{
    val a:Int
}

case class baz(fish:Int) extends bar {
   val a = 3
 }

为什么不抛出任何编译错误?我假设如果有两个相同名称的变量,则应抛出错误,但代码运行顺畅。以及' a'的价值。得到更新?

1 个答案:

答案 0 :(得分:1)

特征val a: Intfoo中的

bar是相同的。当bar扩展foo时,您必须为a定义一个值或将其保留为摘要。

在您的示例中,您明确地将a保留为抽象。这会产生同样的效果:

trait foo {
    val a: Int
}

trait bar extends foo

case class baz(fish:Int) extends bar {
    val a = 3
}