Le motivazioni per i metodi predefiniti di Java 8 e i tratti di Scala differiscono.
Il primo è stato introdotto per supportare l'evoluzione sicura delle API e una forma limitata di ereditarietà multipla. Sfruttando gli idiomi di programmazione funzionale in Project Lambda è stato utile aggiungere, ad esempio, un forEach(lambda)
metodo per java.util.Collection
interfacciarsi senza alterare tutti i possibili implementatori (cosa impossibile da fare senza interrompere la compatibilità con le versioni precedenti). Come effetto collaterale, questo ha offerto anche una forma di composizione di mixin .
I tratti di Scala sono stati progettati da zero come elementi costitutivi per la composizione di componenti modulari. Sono compatibili con l'ereditarietà multipla e non hanno problemi con i diamanti avendo regole rigide sull'ordine di valutazione dei mix-in dovuti alla linearizzazione. Supportano anche lo stato, possono fare riferimento alla classe di implementazione e imporre restrizioni su quale tipo può combinarli. Guarda la libreria delle collezioni Scala dove i tratti sono usati a fondo.