无法实例化特征。因此,它的字段只能通过扩展它的类/特征/对象来访问。因此,这两段代码实际上是相同的:
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
访问修饰符对于特征是多余的。正确?
答案 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