我刚刚在互联网上浏览了一些Scala教程,并注意到在一些示例中,对象是在示例的开头声明的。
Scala中类和对象的区别是什么?
我刚刚在互联网上浏览了一些Scala教程,并注意到在一些示例中,对象是在示例的开头声明的。
Scala中类和对象的区别是什么?
当前回答
对象在某种程度上类似于Java中的静态类,静态特性意味着静态类在放入JVM时不需要创建对象,它可以直接由它的类名使用,并且无论在哪里使用,都共享相同的实例(相同的数据状态)。
其他回答
在Scala中定义一个对象就像在Java中定义一个只有静态方法的类。然而,在Scala中,对象可以扩展另一个超类,实现接口,并像类的实例一样传递。(所以它就像类的静态方法,但更好)。
一个对象只有一个实例(你不能调用新的MyObject)。一个类可以有多个实例。
对象与Java中的静态方法和字段具有相同的(以及一些额外的)用途。
Object是一个类,但它已经是一个实例,因此不能调用new ObjectName。另一方面,Class只是类型,它可以通过调用new ClassName()作为实例。
正如许多人所解释的,object定义了一个单例实例。在这里的答案中,我认为有一件事被遗漏了,那就是对象有几个用途。
It can be the companion object to a class/trait, containing what might be considered static methods or convenience methods. It can act much like a module, containing related/subsidiary types and definitions, etc. It can implement an interface by extending a class or one or more traits. It can represent a case of a sealed trait that contains no data. In this respect, it's often considered more correct than a case class with no parameters. The special case of a sealed trait with only case object implementors is more or less the Scala version of an enum. It can act as evidence for implicit-driven logic. It introduces a singleton type.
这是一个非常强大和普遍的结构。Scala初学者可能非常困惑的是,相同的构造可能有截然不同的用途。一个物体可以同时用于多种不同的用途,这可能会更令人困惑。
object关键字创建了一个新的单例类型,就像只有一个命名实例的类。如果您熟悉Java,那么在Scala中声明一个对象非常类似于创建一个匿名类的新实例。
Scala没有与Java的静态关键字等价的东西,在Scala中经常使用对象,在Java中可以使用带有静态成员的类。