gpt4 book ai didi

scala - 为什么特征是可实例化的?

转载 作者:行者123 更新时间:2023-12-04 13:07:19 25 4
gpt4 key购买 nike

据我所知,Scala 中的特征类似于 Java 中的接口(interface),只是方法允许有实现。此外,与 Scala 类相比,您不能将参数传递给它们以进行构造。

到现在为止还挺好。但是为什么我可以实例化它们呢?真的,我认为没有充分的理由允许这样做。

最佳答案

你并没有真正实例化它们。当您与 Java 进行类比时,让我们更深入地研究它。您可以在 Java 中从抽象类或接口(interface)构建匿名类。在 Scala 中几乎是一样的:

scala> trait A
defined trait A

scala> new A {}
res0: A = $anon$1@5736ab79

请注意,花括号是 必填 当您从特征创建对象时。例如,你不能这样做:
scala> new A
<console>:9: error: trait A is abstract; cannot be instantiated
new A
^

虽然它适用于一个类:
scala> class B
defined class B

scala> new B
res2: B = B@213526b0

当然,如果你的 trait 中的某些元素没有实现,你需要在创建对象时实现它们:
scala> trait C {def foo: Int}
defined trait C

scala> new C {}
<console>:9: error: object creation impossible, since method foo in trait C of type => Int is not defined
new C {}
^

scala> new C {def foo = 42}
res4: C = $anon$1@744957c7

关于scala - 为什么特征是可实例化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12891321/

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