在超类的子类中访问超类参数的受保护值

时间:2017-11-29 06:44:25

标签: scala inheritance

在以下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]

1 个答案:

答案 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)