Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 将一个变量定义为特质中的受保护变量有意义吗?_Scala_Protected_Traits - Fatal编程技术网

Scala 将一个变量定义为特质中的受保护变量有意义吗?

Scala 将一个变量定义为特质中的受保护变量有意义吗?,scala,protected,traits,Scala,Protected,Traits,无法实例化特征。因此,它的字段只能由扩展它的类/特征/对象访问。因此,这两段代码实际上是相同的: trait foo{ protected val fish:String } class bar extends foo{ val fish = "catfish" } 及 protectedaccess修饰符对于traits是多余的。对吗?这是多余的,因为在第一个版本中,您已将成员在实现类中的可见性从受保护的更改为公共的(通过不将其标记为受保护的)。如果不这样做,那么您可以看到在

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

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


protected
access修饰符对于traits是多余的。对吗?

这是多余的,因为在第一个版本中,您已将成员在实现类中的可见性从
受保护的
更改为
公共的
(通过不将其标记为
受保护的
)。如果不这样做,那么您可以看到在trait中将成员定义为
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

它是多余的,只是因为在第一个版本中,您已将成员在实现类中的可见性从
受保护
更改为
公共
(通过不将其标记为
受保护
)。如果不这样做,那么您可以看到在trait中将成员定义为
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

如果trait有一个实现的方法
baz
,而扩展trait的类只使用方法
baz
,该怎么办?我们还需要受保护的修改器吗?不,但是你要通过公共界面暴露
baz
protected
的意思是“对外部用户隐藏,但在继承时允许重写”。很抱歉,我不明白你说的“通过公共接口公开baz”?你这是什么意思?@Core\u我的意思是,当你实例化一个
新的条形码时,你不能调用受保护的成员,这是一种隐私。有意义吗?如果trait有一个实现的方法
baz
,而扩展trait的类只使用方法
baz
?我们还需要受保护的修改器吗?不,但是你要通过公共界面暴露
baz
protected
的意思是“对外部用户隐藏,但在继承时允许重写”。很抱歉,我不明白你说的“通过公共接口公开baz”?你这是什么意思?@Core\u我的意思是,当你实例化一个
新的条形码时,你不能调用受保护的成员,这是一种隐私。有意义吗?在我看来,如果您在Scala代码中使用私有和/或受保护,这意味着您没有真正执行FP,您非常坚持OOP。@samthebest是的,这是真的。顺便说一句,如果您在Scala代码中使用private和/或protected,这意味着您没有真正执行FP,您非常坚持OOP。@samthebest是的,这是真的。顺便提一下