Dados dos rasgos independientes:Composición rasgos independientes
trait T1 {
def x = 42
}
trait T2 {
def x = 0
}
Si trato de definir una mezcla de clases en estos dos rasgos como:
class C extends T1 with T2
me sale un error de compilación:
error: overriding method x in trait T1 of type => Int;
method x in trait T2 of type => Int needs `override' modifier
class C extends T1 with T2
^
one error found
Ahora supongamos T1 y T2 se han desarrollado de forma independiente, por lo tanto, no override ya que no anulan cualquier cosa. ¿Cómo se puede definir C entonces? De esta manera:
class C extends T1 with T2 {
override def x = super.x
}
?
Esto es interesante. Si las dos definiciones de 'x' en' T1' y 'T2' tienen diferentes tipos, parece ser un problema inevitable. ¿Hay una manera inteligente en la Scala de solucionar estos conflictos de nombres si los tipos no coinciden? – Mike
utiliza mi primer ejemplo y luego definir 'C' de la siguiente manera: 'clase C se extiende T1 con T2 {anular def x = Super [T1] .x}'. Por supuesto, también puede llamar a 'super [T2] .x'. –