0
メソッドのシグネチャが競合する場合に実装を選択するのがScalaで選択する方法は?Scalaシグネチャが競合する場合に実装する特性を選択しますか?
は、次のJavaのインターフェイスとします
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");
}
}
をそして今、私は何かを再実装することなく、ごろごろ犬をしたいとします
これはScalaで達成することができますどのように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
}
}
?その階層にクロール、
trait Dog {
def makeSound(): Unit = println("Woof")
def beHappy(): Unit = println("Wag tail")
}
trait Cat {
def makeSound(): Unit = println("Meow")
def beHappy(): Unit = println("Purrr")
}
class PurringDog extends Dog with Cat {
override def makeSound() = super[Dog].makeSound()
override def beHappy() = super[Cat].beHappy()
}
object Test extends App {
val purringDog = new PurringDog
purringDog.beHappy()
purringDog.makeSound()
}
注あなたは(それらのextends
またはwith
後に現れる)直接で混ぜるだけ形質について修飾子を使用することができます。