Ich versuche die Mixins im Kontext von Scala zu verstehen. Insbesondere wollte ich den Unterschied zwischen den Begriffen der Vererbung und Mixins wissen. Wiki sagt, es gibt einen wichtigen Unterschied zwischen den Konzepten von Mixins und Vererbung und daher wollte ich es verstehen.Was ist der Unterschied zwischen Mixins und Vererbung?
Die Definition von Mixin in wiki sagt:
A mixin Klasse dient als der Elternklasse, die gewünschte Funktionalität enthält. Eine Unterklasse kann diese Funktionalität dann erben oder einfach wiederverwenden, , aber nicht als Mittel zur Spezialisierung. In der Regel exportiert das Mixin die gewünschte Funktionalität in eine untergeordnete Klasse, ohne eine starre, einzelne "ist eine" -Beziehung zu erstellen. Hier liegt der wichtige Unterschied zwischen den Konzepten von Mixins und Vererbung darin, dass die Kindklasse immer noch alle Merkmale der Elternklasse erben kann, aber die Semantik über das Kind, das "eine Art von" ist, muss nicht zwingend angewendet werden.
In der obigen Definition kann ich die fett markierten Aussagen nicht verstehen. Was bedeutet es, dass
- Eine Unterklasse Funktionalität in mixin erben kann, aber nicht als Mittel zur Spezialisierung
- In Mixins erbt das Kind alle Funktionen der Elternklasse aber Semantik über das Kind der „eine Art zu sein“ Eltern müssen nicht unbedingt angewendet werden. - Wie kann ein Kind einen Elternteil erweitern und nicht unbedingt eine Art Elternteil? Gibt es ein solches Beispiel?
Vielen Dank im Voraus für jede Klärung der oben genannten.
In Scala, denken Sie an Mixins als eine nette Kompilierzeit-Transformation, die bestimmte Arten mit zusätzlichen Methoden schmücken wird. In diesem Fall, während Scala "gemischte Typen" für den Typüberprüfer verfolgt, werden die Methodendefinitionen selbst in den tatsächlichen Typen * abgeflacht *, so dass kein Eltern-Kind innerhalb der JVM-Klassen eingerichtet ist. Vererbung ist in der Regel mit einer Laufzeitpolymorphie-Methodenauflösung verbunden - aber Mixins sind (weitgehend) orthogonale Konzepte. Java 8-Schnittstelle Standardmethoden sind auch Mixins. – user2864740
Diese Frage scheint [zuvor in einem breiteren Zusammenhang gestellt] (http://stackoverflow.com/questions/860245/mixin-vs-inheritance) gewesen zu sein (obwohl ich durch die Antworten dort nicht vollständig zufrieden bin). – badcook