Object 和 class 的区别
时间: 2024-09-24 09:18:58 浏览: 33
在Scala中,`Object`和`Class`有明显的区别:
1. **Object**[^1]: Scala中的`object`类似于Java中的Singleton(单例),它是一个值,可以拥有常量字段(val)和方法(def)。比如`Box`是一个单例对象,这意味着全局只有一个实例。单例对象定义时通常使用`object`关键字。
```scala
object Box // 定义了一个单例对象
```
2. **Class**: 对于功能更全面的对象,Scala允许创建`class`,它们代表了一种类型,具有构造器、字段和行为。`Class`可以在运行时实例化,不像`object`总是有一个预定义的实例。
3. **伴生关系**: 当一个`Class`和一个与之关联的`object`在同一命名空间中时,这种关系被称为伴生关系。伴生对象(即`object`)可以访问并操作其伴生类的私有成员,反之亦然。这是Scala设计的一个特性,使得代码组织更加紧密。
举例来说,假设有一个名为`Person`的类,它有一个对应的伴生对象`Person companion`:
```scala
class Person(name: String)
object Person {
private val age = 30 // 这个字段对Person类是不可见的
def create(): Person = new Person("John")
}
```
在这个例子中,`Person`类通过伴生对象的`create()`方法得到实例化,而伴生对象能访问`Person`类的私有变量`age`。
阅读全文