Scala保护对象

Ral*_*lph 8 scala protected

在Scala中,如果我创建了一个对象和伴随类,protected如果导入了对象,则可以从类中访问使用修饰符声明的标识符:

object Foo {
  protected val X = 42
}
class Foo {
  import Foo._
  def getX(): Int = X
}
Run Code Online (Sandbox Code Playgroud)

但是,protected无法从类Foo的子类访问标识符:

class Bar extends Foo {
  import Foo._
  def getX(): Int = X * 2
}
Run Code Online (Sandbox Code Playgroud)

我得到一个编译时错误Bar.

其他(隐含的)public,是否有任何访问修饰符,我可以X从它的伴侣的子类访问它,但不能从其他类,包括同一个包中的其他类访问?

Dan*_*ral 9

那是因为只有该类Foo是该对象的伴侣Foo.

这里,privateprotected无意义之间的区别,因为对象Foo单例,这意味着没有任何其他对象与object Foo(Foo.type)具有相同的类.

Scala中的访问限制是基于包的,所以简短的答案是否定的.但是,您可以在基类上创建转发器,除非您需要它在没有实例的情况下可用.

但是,在你的位置,我会回到设计委员会.