考慮下面的代碼:爲什麼重寫已經實現的抽象類型是不可能的?
class A {
class B
type C <: B
trait D
}
class E extends A {
type C = B
}
class F extends E {
override type C = B with D
}
爲什麼在Eclipse IDE英迪格內的Scala IDE的介紹編譯器錯誤消息在E級,相當於F.this.B 壓倒一切的C類抱怨; C型有不兼容型?
畢竟所有的類「B」只是用特徵「D」進行「修改」,因此這兩個類型定義具有相同的基本類型,即「B」。因此兼容的類型定義。
下面的代碼作品。我考慮的類型分配類同變量賦值的規則,如:
class Foo
trait Bar
val a: Foo = new Foo
val fooWithBar: Foo = new Foo with Bar
我的理解是錯誤的?
Foo with Bar是Foo的子類型。這不是問題所在。不允許在修復類型成員時重新定義類型成員,即使是子類型也是如此。如果您將Bar添加到Foo中,則無法重新定義從Foo到Bar的類型成員。 – 2012-01-07 18:16:13