Wie wählt man in Scala aus, welches Merkmal bei im Konflikt stehenden Methodensignaturen die Implementierung auswählen soll?Scala entscheiden, welche Eigenschaft bei widersprüchlichen Signaturen implementiert werden soll?
Angenommen, die folgenden Java-Schnittstellen:
interface Dog {
default void makeSound() {
System.out.println("Woof");
}
default void beHappy() {
System.out.println("Wag tail");
}
}
interface Cat {
default void makeSound() {
System.out.println("Meow");
}
default void beHappy() {
System.out.println("Purrr");
}
}
Und jetzt nehme ich einen Schnurren Hund wollen, ohne etwas Neuimplementierung:
public class PurringDog implements Dog, Cat {
@Override
public void makeSound() {
Dog.super.makeSound();
}
@Override
public void beHappy() {
Cat.super.beHappy();
}
public static void main(String[] args) {
PurringDog purringDog = new PurringDog();
purringDog.makeSound(); //prints Woof
purringDog.beHappy(); //prints Purrr
}
}
Wie kann dies in Scala erreicht werden?