如果我在Scala中有类星座,就像这样:
class A {
def foo() = "bar"
}
class B extends A {
override def foo() = "BAR"
}
class C extends B {
}
Run Code Online (Sandbox Code Playgroud)
是否有可能在C类中显式调用A中定义的方法foo?
Kip*_*ros 18
不,但您可以使用多个特征继承做类似的事情:
trait A { def foo = "from A" }
class B extends A { override def foo = "from B" }
class C extends B with A {
val b = foo // "from B"
val a = super[A].foo // "from A"
}
Run Code Online (Sandbox Code Playgroud)
不,你不能,因为它违反了封装.你绕过了父母的行为,所以C应该扩展B,但你绕过了这个.
请看Jon Skeets对同一问题的出色答案为什么super.super.method(); Java不允许?.
请注意,您可以通过反射访问该字段,但您不希望这样做.