假设我有以下特征和扩展该特征的类
trait T { protected def f() }
class C extends T { def f(): println("!") }
object Main extends App {
val c = new C
c.f() // should be a compile error
}
Run Code Online (Sandbox Code Playgroud)
我在 for 的声明中f声明了,以便可以从 的范围内调用它,但不能由其他人调用。换句话说,应该是编译错误。我以为修饰符 from会保留下来,但事实并非如此。protectedTCC.f()protectedT
我可以C.f()像protected在声明中那样重新声明C,但我不想重复自己。在 Scala 中还有其他方法可以做到这一点吗?
简短的回答:不。
不指定访问修饰符并不意味着“继承访问修饰符”,而是意味着“公共”。Scala 没有public关键字,如果它不这样工作,那么在重写时就无法真正将受保护的成员公开。
换句话说,你必须重复protected修改器。