Scala:如何使子类(在其他实例上)可以访问受保护的方法?
我正在尝试这样做:Scala:如何使子类(在其他实例上)可以访问受保护的方法?,scala,inheritance,access-modifiers,Scala,Inheritance,Access Modifiers,我正在尝试这样做: trait A[Out]{ 受保护的def foo():Out } 特征B扩展了A[Int] 类包装器b(b:b)扩展了b{ 覆盖受保护的def foo():Int=b.foo()+1 } 这将无法编译,因为WrapperB无法访问b.foo() 有几种方法可以解决这个问题,但这些方法对我不起作用: 使foo公开:不起作用,因为我希望它保持保护 使用包作用域:不起作用,因为我希望在不同的包中有许多Bs 还有别的办法吗?怎么样: trait A[Out] { protec
trait A[Out]{
受保护的def foo():Out
}
特征B扩展了A[Int]
类包装器b(b:b)扩展了b{
覆盖受保护的def foo():Int=b.foo()+1
}
这将无法编译,因为WrapperB
无法访问b.foo()
有几种方法可以解决这个问题,但这些方法对我不起作用:
foo
公开:不起作用,因为我希望它保持保护
B
strait A[Out] {
protected def foo(): Out
}
trait B extends A[Int] {
protected def gimme(that: B) = that.foo()
}
class WrapperB(b: B) extends B {
override protected def foo(): Int = gimme(b) + 1
}
我从来都不喜欢
private
和protected
可以访问其他值的方法,我认为这是一个糟糕的设计private
应表示private[此]
。如果您需要跨值访问,我认为您应该声明private[my package]
,即使这意味着在您的情况下选择一个公共的基本包。我基本同意,这通常是一个“组合重于继承”的问题。不管怎样,在我目前的情况下(和其他许多人一样),我一定会受到很久以前在遥远的银河系编写的代码的限制。。。