在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从它的伴侣的子类访问它,但不能从其他类,包括同一个包中的其他类访问?
那是因为只有该类Foo是该对象的伴侣Foo.
这里,private和protected无意义之间的区别,因为对象Foo是单例,这意味着没有任何其他对象与object Foo(Foo.type)具有相同的类.
Scala中的访问限制是基于包的,所以简短的答案是否定的.但是,您可以在基类上创建转发器,除非您需要它在没有实例的情况下可用.
但是,在你的位置,我会回到设计委员会.