gpt4 book ai didi

java - Scala 选择在签名冲突的情况下实现哪个特征?

转载 作者:行者123 更新时间:2023-11-30 02:36:57 25 4
gpt4 key购买 nike

在方法签名冲突的情况下,如何在 Scala 中选择要选择实现的特征?

假设有以下 Java 接口(interface):

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");
}
}

现在假设我想要一只咕噜咕噜的狗,而不需要重新实现任何东西:

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
}
}

如何在 Scala 中实现这一点?

最佳答案

您可以将 super 与限定符一起使用:

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()
}

请注意,您只能对直接混合的特征使用限定符(那些出现在 extendswith 之后的特征),因此在层次结构上爬行(例如具有基本特征 Animal) 不适用于限定符。

关于java - Scala 选择在签名冲突的情况下实现哪个特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42783118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com