Dato il seguente codice:Perché non è possibile eseguire l'override di un tipo astratto già implementato?
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
}
Perché il compilatore presentazione del Scala IDE all'interno della Eclipse Indigo IDE si lamentano con il messaggio di errore tipo prioritario C in classe E, che è uguale a F.this.B; il tipo C ha il tipo incompatibile?
Dopo che tutta la classe "B" è stata "modificata" con la caratteristica "D" e quindi le due definizioni di tipo sono dello stesso tipo di base, che è "B". Quindi definizioni di tipi compatibili.
Il codice seguente funziona. Considero le regole per tipo di assegnazione simile a assegnazione di variabili, come ad esempio:
class Foo
trait Bar
val a: Foo = new Foo
val fooWithBar: Foo = new Foo with Bar
è la mia comprensione che non va?
Foo with Bar è un sottotipo di Foo. Questo non è ciò che il problema è. Non è consentito ridefinire un membro del tipo mentre è fisso, anche in un sottotipo. Se avessi la barra della classe che estende Foo, non puoi ridefinire neanche un membro del tipo da Foo a Bar. –