将变量定义为特征中的保护是否有任何意义?

时间:2014-07-18 13:59:59

标签: scala protected traits

无法实例化特征。因此,它的字段只能通过扩展它的类/特征/对象来访问。因此,这两段代码实际上是相同的:

trait foo{
    protected val fish:String
}
class bar extends foo{
    val fish = "catfish"
}

trait foo{
    val fish:String
}
class bar extends foo{
    val fish = "catfish"
}

protected访问修饰符对于特征是多余的。正确?

1 个答案:

答案 0 :(得分:4)

这是多余的,因为在第一个版本中,您已将成员的可见性从实现类中的protected更改为public(未将其标记为protected)。如果您不这样做,那么您可以看到在特征中将成员定义为protected意味着类必须实现它,不通过其公共API公开它。

trait Foo {
  protected val fish: String
}

class Bar extends Foo {
  override protected val fish = "catfish"
}

val bar = new Bar
bar.fish // not visible