在以下Scala代码中,B
扩展A
,并在其构造函数中将A
作为参数。 B
可以从超类访问foo
,但不能从传入的超类对象访问。{/ p>
class A() {
protected val foo = 1
}
class B(a: A) extends A {
println(foo) // okay
println(a.foo) // fail - "access to protected value foo not permitted"
}
有没有办法在a.foo
中成功获取B
而不使用反射而不将修饰符更改为protected[package]
?
答案 0 :(得分:1)
您可以使用package protected声明变量,因此可以在当前包下使用,例如:
package foobar {
class A {
//package protected variable
protected[foobar] val foo = 1
}
class B(a: A) extends A {
println(foo) // okay
println(a.foo) // fail - "access to protected value foo not permitted"
}
}
import foobar._
val b = new B(new A)