Sto cercando di capire i Mixin nel contesto di scala. In particolare volevo sapere la differenza tra i concetti di ereditarietà e Mixin. Wiki dice che c'è una differenza importante tra i concetti di mixin e ereditarietà e quindi volevo comprenderlo.Qual è la differenza tra mixin ed ereditarietà?
La definizione di Mixin in wiki dice:
classe intermedia atti a come la classe padre, che contengono la funzionalità desiderata. Una sottoclasse può quindi ereditare o semplicemente riutilizzare questa funzionalità, ma non come mezzo di specializzazione. In genere, il mixin esporta la funzionalità desiderata in una classe figlia, senza creare una relazione rigida, singola "è una". Qui sta la differenza importante tra i concetti di mixin e ereditarietà, in quanto la classe figlio può ancora ereditare tutte le caratteristiche della classe genitore, ma, la semantica sul bambino "essendo una specie di" il genitore non deve necessariamente essere applicato.
Nella definizione precedente, non sono in grado di comprendere le istruzioni contrassegnate in grassetto. cosa vuol dire che
- una sottoclasse può ereditare la funzionalità in mixin, ma non come un mezzo di specializzazione
- Nel mixins, il figlio eredita tutte le caratteristiche della classe padre, ma la semantica sul bambino "essere una specie" del il genitore non deve necessariamente essere applicato. - Come può un bambino estendere un genitore e non necessariamente un tipo di genitore? C'è un esempio del genere.
Grazie in anticipo per qualsiasi chiarimento su quanto sopra.
In Scala, pensa a Mixins come a una trasformazione in fase di compilazione che decorerà determinati tipi con metodi aggiuntivi. In questo caso, mentre Scala tiene traccia dei "tipi misti" per il controllo di tipo, le definizioni dei metodi stessi sono * appiattite * nei tipi effettivi, quindi non esiste un genitore-figlio stabilito all'interno delle classi JVM. L'ereditarietà è generalmente associata a una risoluzione del metodo polimorfico di runtime - ma i mixin sono (in gran parte) concetti ortogonali. Interfaccia Java 8 I metodi predefiniti sono anche mixin. – user2864740
Sembra che questa domanda sia stata [posta prima in un contesto più ampio] (http://stackoverflow.com/questions/860245/mixin-vs-inheritance) (anche se non mi sento completamente soddisfatto dalle risposte in questo campo). – badcook