我有一个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"的一个字段.有没有办法做到这一点?
规范说您可以访问受保护的成员:
任何这些类的伴随模块[以定义模板为基础].
也就是说,不是来自以定义模板为基础的对象的伴随类.棘手.
由于"模块"命名法,这一点并不明显,模块只是意味着对象.偶尔谈论改变这种情况.虽然类和模块可以是伴侣,但关系不是对称的; 考虑隐式搜索.
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)
| 归档时间: |
|
| 查看次数: |
2951 次 |
| 最近记录: |