Gegeben zwei unabhängige Merkmale:
%Vor%Wenn ich versuche, eine Klasse zu definieren, die diese beiden Eigenschaften mischt:
%Vor%Ich erhalte einen Compilerfehler:
%Vor%Nun nehmen wir an, dass T1 und T2 unabhängig voneinander entwickelt wurden, also keine Überschreibung, da sie nichts übersteuern. Wie kann C dann definiert werden? So:
%Vor%?
Dies ist bekannt als das Diamantenproblem . In Scala gibt es zwei Möglichkeiten, dies zu lösen:
%Vor% Wenn Sie new C().x
jetzt aufrufen, erhalten Sie 42
, weil Scala die Implementierung der Eigenschaft verwendet, die Sie zuletzt gemischt haben. new D().x
wird übrigens 0
ergeben. Dies bedeutet, dass Sie, um das Diamantproblem zu lösen, explizit definieren müssen, welche Implementierung Sie verwenden möchten.
Der andere Weg ist wie folgt:
%Vor% Ein Aufruf von new C().x
liefert immer noch 42
, weil T2 das letzte Merkmal ist, das gemischt wurde. Der Unterschied besteht darin, dass Sie x
in C
nicht definieren müssen.