Warum ist das Überschreiben eines bereits implementierten abstrakten Typs nicht möglich?

8

Gegeben folgender Code:

%Vor%

Warum beschwert sich der Präsentationscompiler der Scala IDE in der Eclipse Indigo IDE mit der Fehlermeldung , die in Klasse E den Typ C überschreibt, was gleichbedeutend ist mit F.this.B; Typ C hat den inkompatiblen Typ ?

Nachdem alle Klasse "B" nur mit der Eigenschaft "D" "geändert" wurde, haben die beiden Typdefinitionen denselben Basistyp, nämlich "B". Daher kompatible Typdefinitionen.

Der Code unter funktioniert . Ich betrachte die Regeln für die Typzuweisung ähnlich wie bei der Variablenzuweisung:

%Vor%

Ist mein Verständnis falsch?

    
Tim Friske 07.01.2012, 16:38
quelle

1 Antwort

13

Sie sind nicht kompatibel, Typ C könnte in einer kontravarianten Position verwendet werden

%Vor%

Ergänzung Mit e: E dürfen Sie e.f(new B) aufrufen. Was ist, wenn e val e = new F ist?

    
Didier Dupont 07.01.2012, 17:26
quelle

Tags und Links