Las motivaciones para los métodos predeterminados de Java 8 y los rasgos de Scala difieren.
El primero se introdujo para admitir la evolución segura de API y una forma limitada de herencia múltiple. Al aprovechar los modismos de programación funcional en Project Lambda, ha sido beneficioso agregar, por ejemplo, un forEach(lambda)
método para java.util.Collection
interactuar sin alterar todos los implementadores posibles (lo que en realidad es imposible de hacer sin romper la compatibilidad con versiones anteriores). Como efecto secundario, esto también ofreció una forma de composición mixina .
Los rasgos de Scala se diseñaron desde cero como bloques de construcción para la composición de componentes modulares. Son compatibles con la herencia múltiple y no tienen problemas de diamantes al tener reglas estrictas sobre el orden de evaluación de las mezclas debido a la linealización. También son compatibles con el estado, pueden hacer referencia a la clase de implementación y establecer restricciones sobre qué tipo puede mezclarlos. Mire la biblioteca de colecciones de Scala donde los rasgos se utilizan a fondo.