小编典典

Scala中对象和类之间的区别

all

我只是在 Internet 上浏览一些 Scala 教程,并注意到在一些示例中,在示例开头声明了一个对象。

Scalaclass和有什么区别?object


阅读 115

收藏
2022-03-03

共1个答案

小编典典

tl;博士

  • class C定义一个类,就像在 Java 或 C++ 中一样。
  • object O创建一个单例对象O作为某个匿名类的实例;它可用于保存与某个类的实例无关的静态成员。
  • object O extends T使对象O成为trait T; 然后你可以通过O任何地方,aT是预期的。
  • 如果有class C,那么object C就是类的伴生对象C;请注意,伴随对象 不会 自动成为C.

另请参阅对象的 Scala 文档。

object作为静态成员的主机

大多数情况下,您需要object保存可用的方法和值/变量,而无需先实例化某个类的实例。static这种用法与Java中的成员密切相关。

object A {
  def twice(i: Int): Int = 2*i
}

然后,您可以使用调用上述方法A.twice(2)

如果twice是某个类的成员A,那么您需要先创建一个实例:

class A() {
  def twice(i: Int): Int = 2 * i
}

val a = new A()
a.twice(2)

您可以看到这是多么多余,因为twice不需要任何特定于实例的数据。

object作为一个特殊的命名实例

您还可以将其object本身用作类或特征的一些特殊实例。当你这样做时,你的对象需要扩展一些trait才能成为它的子类的一个实例。

考虑以下代码:

object A extends B with C {
  ...
}

该声明首先声明了一个匿名(不可访问)类,它扩展了BC,并实例化了这个名为 的类的单个实例A

这意味着A可以传递给期望类型为BorC或的对象的函数B with C

的附加功能object

Scala 中还存在一些对象的特殊功能。我建议阅读官方文档

2022-03-03