如果我写这样的话:
trait foo {
val a: Int
}
trait bar extends foo{
val a:Int
}
case class baz(fish:Int) extends bar {
val a = 3
}
为什么不抛出任何编译错误?我假设如果有两个相同名称的变量,则应抛出错误,但代码运行顺畅。以及' a'的价值。得到更新?
答案 0 :(得分:1)
val a: Int
和foo
中的 bar
是相同的。当bar
扩展foo
时,您必须为a
定义一个值或将其保留为摘要。
在您的示例中,您明确地将a
保留为抽象。这会产生同样的效果:
trait foo {
val a: Int
}
trait bar extends foo
case class baz(fish:Int) extends bar {
val a = 3
}