我很困惑。在我现有的项目中,我找不到 extends
之间的区别和 with
.请你帮助我好吗?
最佳答案
在 Scala 中,您可以从 class
继承es(具体或 abstract
)和 trait
s。与您只能扩展一个类,但在 Java 中实现任意数量的接口(interface)类似,您只能从一个 class
继承。 , 但与 trait
一样多s 随你喜欢。
如果您要扩展 class
,该类应立即遵循 extends
关键词。任意 trait
您要扩展的 s 应该跟在后面,用 with
分隔关键字。
如果你不扩展一个类,你可以把你的第一个 trait
在 extends
之后关键字,然后继续。
就像在 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/