Scala:访问伴随对象特征的受保护字段

bwr*_*oga 5 scala

我有一个Trait,一个Companion对象和一个Scala中的类:

trait A {
    protected var foo = "Foo"
}

object B extends A {
}

class B {
     println(B.foo)
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能访问foo?我以为foo会成为对象"B"的一个字段.有没有办法做到这一点?

som*_*ytt 7

规范说您可以访问受保护的成员:

任何这些类的伴随模块[以定义模板为基础].

也就是说,不是来自以定义模板为基础的对象的伴随类.棘手.

由于"模块"命名法,这一点并不明显,模块只是意味着对象.偶尔谈论改变这种情况.虽然类和模块可以是伴侣,但关系不是对称的; 考虑隐式搜索.

trait A {
  protected var foo = "Foo"
  protected def bar = "Bar"
}

object B extends A {
  //override protected var foo = super.foo // no
  override protected def bar = super.bar
}

class B {
  //println(B.foo) // no
  println(B.bar) // ok
}


class C extends A

object C {
  println(new C().foo)  // ok
}
Run Code Online (Sandbox Code Playgroud)