Warum ist der Fehler unten? Wie umgehen Sie es?Warum kann eine Klasse keine Merkmale mit derselben Signatur erweitern?
EDIT: Ich nahm an, dass seit A und B zu (Schnittstelle, Klasse) Paare kompilieren, es ist eine Frage der Wahl der richtigen statischen Methodenaufruf zu implementieren, wenn C. C. Ich würde erwarten, dass die Priorität nach Reihenfolge sein.
scala> trait A {def hi = println("A")} defined trait A scala> trait B {def hi = println("B")} defined trait B scala> class C extends B with A :6: error: error overriding method hi in trait B of type => Unit; method hi in trait A of type => Unit needs `override' modifier class C extends B with A scala> trait A {override def hi = println("A")} :4: error: method hi overrides nothing trait A {override def hi = println("A")}
EDIT: beachten Sie, dass in Ruby das funktioniert gut:
>> module B; def hi; puts 'B'; end; end => nil >> module A; def hi; puts 'A'; end; end => nil >> class C; include A; include B; end => C >> c = C.new => # >> c.hi B => nil
Excellent! Schade, dass, wenn ich versuche, Klasse C erweitert A mit B ', der Fehler diese Art der Konfliktlösung nicht erwähnt. – IttayD
@IttayD mit Scala 2.10.4: Die Fehlermeldung besagt, wie dieses Problem gelöst werden kann: (Hinweis: Dies kann durch Deklarieren einer Überschreibung in Klasse C gelöst werden.) Klasse C erweitert A mit B { –