Kotlin 对象object与class类的区别
- 关键字object 不管在哪里使用,都遵循相同的核心理念,就是在定义类的同时创建一个实例,也就是一个对象。伴生对象在类的内部声明,属于类的成员,用关键字 companion object 声明
- 对象声明将类的声明和创建该类的一个实例结合到了一起,在声明一个类的同时自动创建一个对象,对象声明是Kotlin对单例模式的最高支持。
- 单例模式是很简单的一种模式,属于创建模式。这种模式涉及一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象。
- 使用单例模式,在内存中只有一个实例,所以内存开销小,对于频繁创建、销毁的对象尤其有效。另外,单例模式也避免了竞争性资源访问时的死锁。在Kotlin中实现单例模式非常简单,使用对象声明即可。
- 与类一样,在对象声明中可以使用属性和方法,还可以包含初始化模块等。因为对象声明是自动实例化的,不需要使用语句对其进行实例化,所以为对象声明构造方法没有意义。对象声明不允许有主构造方法和从构造方法。使用对象名称加‘.’可以引用对象中的属性和方法。
- 与类一样,对象可以继承接口、类,但是不能继承对象声明,因为对象声明是单例模式。对象声明可以嵌套在类中(但是不能嵌套在内部类中)。
- 与类不同的是,对象不能在函数内部声明,而类可以在函数内部声明。也就是说,对象声明不能是局部的,不能在内部类和函数中进行对象声明。