Scala - 扩展与

标签 scala extends

我很困惑。在我现有的项目中,我找不到 extends 之间的区别和 with .请你帮助我好吗?

最佳答案

在 Scala 中,您可以从 class 继承es(具体或 abstract)和 trait s。与您只能扩展一个类,但在 Java 中实现任意数量的接口(interface)类似,您只能从一个 class 继承。 , 但与 trait 一样多s 随你喜欢。

如果您要扩展 class ,该类应立即遵循 extends关键词。任意 trait您要扩展的 s 应该跟在后面,用 with 分隔关键字。

如果你不扩展一个类,你可以把你的第一个 traitextends 之后关键字,然后继续。

就像在 Java 中一样,每个类都是 Object 的子类。无论您是否明确声明,Scala 中的每个(用户定义的)类 extends AnyRef with ScalaObject无论您是否明确包括在内。

因此,以下几组声明是等价的:

class MyClass { ... }
class MyClass extends AnyRef with ScalaObject { ... }

class MyClass extends MySuperClass { ... }
class MyClass extends MySuperClass with ScalaObject { ... }

class MyClass extends MyTrait1 with MyTrait2 { ... }
class MyClass extends AnyRef with MyTrait1 with MyTrait2 { ... }

class MyClass extends MySuperClass with MyTrait1 with MyTrait2 { ... }

如果更改MySuperClass的顺序,最后一个例子就不一样了。 , MyTrait1 , 和 MyTrait2 .特别是,您不能将特征放在类的前面,并且如果它们都具有相同方法的实现,则堆叠特征的顺序很重要。 (在这种情况下,最后一个“获胜”。)

还要记住只有 class Scala 中的 es 可以有参数,所以你只能将参数附加到 extends 之后的类型。关键字,从不用于 with 之后列出的任何类型.

希望有帮助!

关于Scala - 扩展与,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41031166/

相关文章:

Java/Kotlin- Akka Stream Source.reduce 在 Source 中为 null 时不起作用

scala - Scala/Lift 中 -> _ => 是什么意思?

java - 当我输入数字时如何得到不同的结果?

java - Java 中的泛型

android - extends AsyncTask<Void, Void, Long> 是如何工作的

scala - 向 Spark DataFrame 添加嵌套列

scala - 如何使用 doobie 连接到 Hive

scala - 将 Future[List[String]] 转换为 List[String]

html - 将一个 CSS 类的样式包含到另一个

java - 泛型扩展