方法調用某些超一流的。如果我有斯卡拉類星座是這樣的:選擇Scala中
class A {
def foo() = "bar"
}
class B extends A {
override def foo() = "BAR"
}
class C extends B {
}
是否有可能在C類顯式調用在一個被定義的方法foo?
方法調用某些超一流的。如果我有斯卡拉類星座是這樣的:選擇Scala中
class A {
def foo() = "bar"
}
class B extends A {
override def foo() = "BAR"
}
class C extends B {
}
是否有可能在C類顯式調用在一個被定義的方法foo?
不,你不能,因爲它違反了封裝。你繞過你父母的行爲,所以C應該擴展B,但你繞過了這個。
請參閱Jon Skeets對同一問題Why is super.super.method(); not allowed in Java?的優秀回答。
請注意,您可以通過反射訪問該字段,但您不想這樣做。
不,我會離開它,但顯然是SO要我繼續30個角色。
沒有,但你可以用多個性狀的遺傳相似的東西:
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"
}
而爲什麼這不會像@Matthew在他的回答中所說的那樣違反封裝? – MaxNevermind
在這個例子中,類「C」顯式擴展了'A',所以它直接訪問'A'的行爲。說實話,這個例子看起來很奇怪,我不確定這是不錯的風格。 –
如果你碰巧知道爲什麼這是不可能的原因,可能是一些以填補30個字符:) – arsenbonbon